0
ユーザーはDjangoフォームにデータを入力し、各タイムスロットと1日スロットにつき1つのエントリだけをデータベースに入れようとしています。同じフィールドデータを持つ複数のフォームエントリを防止しようとしています(最初のユーザーがタイムスロットを使用できるようにしてください)
例:ユーザーが午前8時00分の間に話すように「サインアップ」するためにフォームに記入 - スケジュールID 2.
データベースエントリがすでに同じタイムスロットとDAYSLOTで存在している場合のための1日目の午前9時、私はエラーを提起してエントリを防止したい。 ...任意の助けてくれてありがとう
models.py
from django.db import models
import datetime
class Schedule(models.Model):
title = models.CharField(max_length=250)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
class Agenda(models.Model):
dayChoice = (
('d1', "Day 1"),
('d2', "Day 2"),
('d3', "Day 3"),
('d4', "Day 4")
)
fullName = models.CharField(max_length=250)
startTime = models.TimeField(auto_now=False, blank=True, null=True)
endTime = models.TimeField(auto_now=False, blank=True, null=True)
approved = models.BooleanField(blank=True)
daySlot = models.CharField(max_length=2, choices=dayChoice)
sub_date = models.DateTimeField(auto_now=True)
scheduler = models.ForeignKey(Schedule, on_delete=models.CASCADE)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.fullName
views.py
from django.shortcuts import render, redirect
from django.utils import timezone
from django.shortcuts import render, get_object_or_404
from .models import Schedule, Agenda
from .forms import AgendaForm
# Create your views here.
def schedule_list(request):
schedules = Schedule.objects.all()
return render(request, 'adjenda/schedule_list.html', {'schedules': schedules})
def agenda_detail(request, pk):
schedules = get_object_or_404(Schedule, pk=pk)
agenda = Agenda.objects.filter(scheduler_id=pk).order_by('startTime')
form = AgendaForm(request.POST)
if request.method == "POST":
form = AgendaForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect("/schedule/" + pk)
else:
form = AgendaForm()
return render(request, 'adjenda/schedule_detail.html', {'agenda': agenda, 'schedules': schedules, 'form': form})
forms.py
from django import forms
from .models import Agenda, Schedule
class AgendaForm(forms.ModelForm):
class Meta:
model = Agenda
fields = '__all__'
def clean_startTime(self):
startTime = self.cleaned_data['startTime']
if Agenda.objects.filter(startTime=startTime).exists():
raise forms.ValidationError("Time/Day already taken")
return startTime
ここ
は、私がこれまで持っているものですが、フィルタは、テーブル全体にまたがっだけではなく、スケジュールIDごとにフィルタリングしています!たぶん
これは私がまさに必要です!私はまた、パラメータとして "スケジューラ"を追加し、完全に働いた。あまりにも多くのギレルモ、ありがとう! – CelineDijon
私はこれも必要です。どこにunique_togetherを追加しますか?ドキュメンテーションはそれに役立つものではありません。 – student101
@ student101 unique_togetherに含めるフィールドを収めているモデルクラスの下のmodels.pyにそれを追加します。 – CelineDijon