Почему проверка Django ModelForm считает, что это неверно? - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть то, что мне кажется довольно простой настройкой модели, модели и представления, играющего с ними двумя. Единственное неудобство в том, что модель имеет пользовательское свойство, которое нельзя поместить в форму, скорее оно должно быть заполнено request.user, поэтому у меня есть это:

# models.py
class Update(models.Model):
    user         = models.ForeignKey(User, related_name="updates")
    organisation = models.ForeignKey(Organisation, related_name="updates")
    publish      = models.BooleanField(default=True)



class UpdateForm(ModelForm):
    name = forms.CharField(
        max_length=140,
        required=False,
        widget=forms.TextInput(attrs={"class": "blankable"})
    )

    class Meta(NodeForm.Meta):
        model = Update



# views.py
def status(request):

    from myproject.organisations.models import Organisation
    from myproject.feeds.models         import Update, UpdateForm

    stream = 0
    if request.method == "POST":

        o = request.POST.get("organisation")

        if not o or request.user not in Organisation.objects.get(pk=request.POST.get("organisation")).administrators.all():
            return HttpResponseRedirect(reverse("ethico.core.views.index"))

        f = UpdateForm(request.POST, instance=Update(user=request.user))

        if f.is_valid():
            stream = f.save()
        else:
            stream = f.errors
    ...

При каждом запуске я всегда получаю одну и ту же ошибку:

user: This field is required.

Я пытался установить f с атрибутом initial, используя {"user": 1}, и он все еще говорит, что это необходимо. Я попытался передать измененный POST, скопировав request.POST в новую переменную и изменив его перед передачей в UpdateForm, но это ужасно. Что я здесь забыл?

1 Ответ

1 голос
/ 23 февраля 2010

Вы должны попытаться исключить пользовательское поле в форме

class UpdateForm(ModelForm):
  name = forms.CharField(
    max_length=140,
    required=False,
    widget=forms.TextInput(attrs={"class": "blankable"})
  )

  class Meta:
    model = Update
    exclude = ("user",)

http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#s-using-a-subset-of-fields-on-the-form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...