0
사용자가 장고 양식에 데이터를 입력하고 각 시간 슬롯 및 하루 슬롯 당 하나의 항목 만 데이터베이스에 입력하도록하려고합니다.동일한 필드 데이터를 가진 다중 양식 항목을 방지하려고 시도 함 (첫 번째 사용자가 시간 슬롯을 사용할 수 있음)
예 : 사용자 오전 8시 말을 "가입"할 양식을 채우고 - 일정 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