Django:使用 "Unique Together" 保存并通过内联表单集删除对象会导致错误页面



很抱歉,如果这是一个简单的修复,我的内联函数集有两个问题:

  1. 保存一个无效对象(不满足唯一的合并要求)会抛出一个错误页面,而不是在表单中显示错误。

    有一次,我在保存无效对象时错误显示正确,但当我试图保存有效对象时,我会收到一个错误,说membership.department为null。这就是为什么我把";例如在";但现在我遇到了一个新问题,即在保存无效对象时不显示错误。

  2. 删除一个有效对象时,我也有同样的问题。对象被删除了,但我仍然得到一个错误页面。。。

我不知所措。

保存无效对象时,我得到:

The Membership could not be created because the data didn't validate.

当删除有效对象时,我得到:

[u'Select a valid choice. That choice is not one of the available choices.']

型号:

class Membership(models.Model):
    project = models.ForeignKey(Project)
    department = models.ForeignKey(Department)
    employee = models.ForeignKey(Employee)
    role = models.ManyToManyField(Role, blank=True, null=True)
    class Meta:
        unique_together = (("project", "employee",),)

查看.py

def employee_edit(request, employee_id):
    i = get_object_or_404(Employee, pk=employee_id)
    MembershipForm = make_membership_form(i)
    MembershipFormSet = inlineformset_factory(Employee, Membership, exclude='department', extra=1, form=MembershipForm)
    if request.method == "POST":
        f = MembershipFormSet(request.POST, instance=i)
        if f.is_valid():
            instances = f.save(commit=False)
            for instance in instances:
                instance.department = i.department
                instance.save()
            f.save_m2m()
            return render_to_response('dbtest/edit.html', {'item': i, 'formset': f, }, context_instance=RequestContext(request))
    else:
        f = MembershipFormSet(instance=i)
    return render_to_response('dbtet/edit.html', {'item': i, 'formset': f, }, context_instance=RequestContext(request))
def make_membership_form(i):
    class MembershipForm(forms.ModelForm):
        project = forms.ModelChoiceField(queryset=Project.objects.filter(department=i.department))
        class Meta:
            model = Membership
            exclude = ('department', 'employee')
            unique_together = (("project", "employee",),)
    return MembershipForm

第一条错误消息非常直接。

The Membership could not be created because the data didn't validate.

您保存表单集时没有首先检查表单集是否有效。只有当formset.is_valid()为true时,才应调用save。再看看我对你之前问题的回答

最新更新