Django: сохранение с помощью «Unique Together» и удаление объектов с помощью inlineformset приводит к ошибочным страницам - PullRequest
0 голосов
/ 23 марта 2012

Извините, если это простое исправление, у меня 2 проблемы с моим набором inlineform:

  1. При сохранении недопустимого объекта (не удовлетворяющего требованию уникальности вместе) выдается страница с ошибкой, а неотображение ошибок в форме.

    В какой-то момент мои ошибки корректно отображались при сохранении недопустимого объекта, но при попытке сохранить действительный объект я получаю сообщение об ошибке, указывающее, что members.department был нулевым.Вот почему я поставил «например в экземплярах», но теперь я получаю эту новую проблему не отображать ошибки при сохранении недопустимого объекта.

  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

1 Ответ

1 голос
/ 24 марта 2012

Первое сообщение об ошибке довольно простое.

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

Вы сохраняете набор форм, не проверив сначала, что он действителен.Вы должны вызывать сохранение только если formset.is_valid() верно.Посмотрите еще раз на мой ответ на ваш предыдущий вопрос

...