Параметр "экземпляр" ModelForm и поле внешнего ключа - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь инициализировать объект с параметром "instance", но он не входит в форму. Это обязательный элемент, поэтому is_valid завершается ошибкой. Может кто-нибудь, пожалуйста, посоветуйте, я почти уверен, что это простая ошибка, но не могу ее обнаружить.

ФОРМА:

from django.forms import ModelForm

from tagging.forms import TagField

class BusinessEditForm(ModelForm):
tags = TagField()

class Meta:
    model = Business
    exclude = ('owner', 'pub_date')

Логика в views.py

if businessid:
    b = Business.objects.get(id=businessid)
    category = b.category
    assert(b.owner == request.user) or request.user.is_staff
    #form = forms.BusinessEditForm(request.POST, instance=b)
else:
    assert category.is_public or request.user.is_staff
    b = Business(owner=request.user, category_id=category.id)
    # form = forms.BusinessEditForm(request.POST, instance=b)
    isNew = True

if request.method == "POST":
    form = forms.BusinessEditForm(request.POST, instance=b)

    if form.is_valid():

Последняя строка имеет значение False.

Любая помощь приветствуется.

Спасибо, Игорь

Ответы [ 3 ]

0 голосов
/ 16 января 2012

Если вы исключаете обязательные поля из формы, вам нужно установить их программно перед вызовом is_valid(), поскольку в противном случае форма не создаст действительный объект Business.Вот почему is_valid() возвращает False.

0 голосов
/ 23 февраля 2012

Не загромождая свои взгляды, вы можете записать в метод очистки форм:

def clean(self):
  self.cleaned_data.update(excluded_field=self.instance.excluded_field)
  return super(YourForm, self).clean()

Но тогда вы также должны требовать, чтобы в вашем методе __init__ форм был задан экземпляр и были установлены исключенные поля.

0 голосов
/ 16 января 2012

Если вам нужно передать instance в форму, как если бы она была частью данных формы, возможно, вы можете попробовать что-то вроде этого:

if request.method == "POST":
    form_data = request.POST.copy()
    form_data['instance'] = b
    form = forms.BusinessEditForm(form_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...