检查prefiled formset并删除空

时间:2012-03-08 23:37:42

标签: django django-forms

在我的预订网站上举办活动,我想让人们管理他们的客人名单。我使用Registration模型代表预订,使用外键Guest代表invited = models.ForeignKey(Registration)模型的访客。

我使用modelformset_factory创建了一组表单来记录注册时的每个访客。现在,要更新此列表,我使用以下代码:

registr = Registration.objects.get(id=postid) # get the registration
GuestFormSet = modelformset_factory(Guest,
                       extra=MAXGUESTS,
                       exclude=('invited',)) # generate MAXGUESTS Guest forms
guests = GuestFormSet(request.POST) # put the submited formset
if guests.is_valid():
    guests = guests.save(commit=False)
    for guest in guests:
        guest.invited = registr
        guest.save()

这可以(+/-)更新现有客人的字段或者是一个但是现在我希望能够删除来宾(只需清空客人的表单) 。问题是我有一个错误"这个字段是必需的。"对于我想删除的来宾的每个字段。

知道我该怎么做吗?

谢谢


解决方案

registr = Registration.objects.get(id=postid) # get the registration
maxg = max(0,MAXGUESTS - len(Guest.objects.filter(invited=registr))) # MAXGUEST form, existing guests included
GuestFormSet = modelformset_factory(Guest,
                       extra=maxg,
                       can_delete=True,
                       exclude=('invited',)) # generate MAXGUESTS Guest forms
guests = GuestFormSet(request.POST) # put the submited formset

if guests.is_valid():
    # create new guests
    guests = guests.save(commit=False)
    for guest in guests:
        guest.invited = registr
        guest.save()

    # get the guests from the updated database
    maxg = max(0,MAXGUESTS - len(Guest.objects.filter(invited=registr)))
    GuestFormSet = modelformset_factory(Guest, extra=maxg, can_delete=True, exclude=('invited',))
    guests = GuestFormSet(queryset=Guest.objects.filter(invited=registr))

1 个答案:

答案 0 :(得分:1)

在django中,我看到modelformset_factory接受了can_delete参数:https://code.djangoproject.com/browser/django/trunk/django/forms/models.py#L664

您可以在此处看到can_delete:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets