根据主表单的值允许的内联表单集的条件数量

问题描述

这是我的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 (将#修改为@)