在我的预订网站上举办活动,我想让人们管理他们的客人名单。我使用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))
答案 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