django - 根据主表单中的值允许的内联表单集的条件数量
问题描述
这是我的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)
视图.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)
我想让我的事件表单在 event 时要求并接受一个或多个 dateevent 内联表单集,如果是则不type = 'performance'
接受type = 'other'
,并且在 event 时要求一个且仅一个 dateevent 内联表单集type = 'recording release'
。
这是第一次尝试。这会是一个好的解决方案吗?
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, "events/event-edit.html", context)
else:
form_event.save()
form_date_event.save()
return redirect('my-events')
解决方案
推荐阅读
- reactjs - 在这种情况下如何声明 PropsType?
- sql - 如何在 SQL SERVER 中仅使用 AM/PM 提取小时数
- android-activity - 如何将 Activity 类型传递给 Xamarin.Android 中的方法?
- javascript - 通过逻辑运算符分配变量值的打字稿仅使用后一种类型
- html - iframe 用于显示 PDF 文件。需要禁用右键单击 iframe 和 pdf
- javascript - 如何在课堂上编写摩卡测试
- java - 我在某些设备上遇到以下故障
- javascript - 我的“加粗”函数以一种奇怪的方式构建字符串
- vba - 我应该怎么做才能避免错误消息“对象变量或未设置块变量”
- php - 具有一小时间隔和动态间隔的动态时隙