问题描述
这是我的models.py
:
class Event(models.Model):
EV_TYPE = (
('performance','performance'),('recording release','recording release'),('other','other'),)
title = models.CharField(max_length=200)
type = models.CharField(max_length=20,choices=EV_TYPE,default="performance")
class dateEvent(models.Model):
event = models.ForeignKey(Event,on_delete=models.CASCADE)
start_date_time = models.DateTimeField(auto_Now=False,auto_Now_add=False)
views.py:
def event_edit_view(request,id):
event = get_object_or_404(Event,id=id)
form_event = EventForm(request.POST or None,instance=event)
DateEventFormSet = inlineformset_factory(Event,dateEvent,extra=5,can_delete=True,fields=('event','start_date_time',),form_date_event = DateEventFormSet(request.POST or None,instance=Event.objects.get(id=id),queryset=dateEvent.objects.filter(event__id=id))
context = {
'event': event,'id': event.id,'form_event': form_event,'form_date_event': form_date_event,}
if request.method == "POST":
if form_event.is_valid():
form_event.save()
form_date_event.save()
return redirect('my-events')
else:
raise forms.ValidationError(form_date_event.errors)
else:
raise forms.ValidationError([form_event.errors,form_date_event.errors])
return render(request,"events/event-edit.html",context)
如果事件为 type = 'performance'
,我希望我的事件表单要求并接受一个或多个 dateevent 内嵌表单集,如果 type = 'other'
则不接受,如果事件 type = 'recording release'
则接受一个且仅一个 dateevent 内嵌表单集事件 if form_date_event.is_valid():
flag=False
evt_type = form_event.cleaned_data.get('type')
if evt_type =="recording release" and form_date_event.lenght != 1:
flag = True
break
elif evt_type =="performance" and form_date_event.lenght < 1:
flag = True
break
if flag:
messages.error(request,'There must be one date event')
return render(request,context)
else:
form_event.save()
form_date_event.save()
return redirect('my-events')
。
WHERE
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)