как изменить поле формы в методе is_valid () - PullRequest
2 голосов
/ 25 декабря 2011

У меня есть две модели

class Friend(models.Model):
       me = models.ForeignKey(User)
       friend = models.ForeignKey(User)
       remark = models.CharField(max_length=15)

      def __unicode__(self):
            return self.remark

class Message(models.Model):
       from_user = models.ForeignKey(User)
       to_user = models.ForeignKey(User)
       ...

Я создаю форму для сообщения

class MessageForm(ModelForm):
        class Meta:
              model = Message

, но когда я отображаю форму в html, я надеюсь, что я отображаю список выбора to_user просто 'Замечание '(в модели Friend)

, и я переопределяю метод MessageForm * init , подобный следующему:

class MessageForm(ModelForm):
        class Meta:
              model = Message
        def __init__(self,*args,**kwargs):
              super(MessageForm, self).__init__(*args,**kwargs)
              init = kwargs.get('initial')
              if init:
                  if 'from_user' in init:
                       me = init['from_user']
                       self.fields['to_user'].queryset = Friend.objects.filter(me=me)

хорошо при отправке данных, form.is_valid () ошибка ошибки: невозможно назначить "": "Message.to_user" должен быть экземпляром "User".

, поэтому я хочу изменить значение self.fields [to_user '] до вызова is_valid ()как:

def is_valid(self):
     # do something  to fix the problem
     super(MessageForm, self).is_valid()

Ответы [ 2 ]

0 голосов
/ 26 декабря 2011

Вам нужно ModelChoiceField в вашей форме, которая позаботится о поиске отношений.

0 голосов
/ 25 декабря 2011

is_valid() вызывает метод clean() формы, поэтому поместите туда свой хак:

def clean(self):
    # hack hack hack, operating on self.cleaned_data

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