0

これが簡単な修正である場合は申し訳ありませんが、インラインフォームセットで2つの問題が発生しています。

  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",),)

VIEW.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
4

1 に答える 1

1

最初のエラーメッセージは非常に単純です。

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

最初にフォームセットが有効であることを確認せずにフォームセットを保存しています。trueの場合にのみ、saveを呼び出す必要formset.is_valid()があります。あなたの前の質問に対する私の答えをもう一度見てください

于 2012-03-23T20:42:40.990 に答える