我有兩個型號如何改變方法is_valid()
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的選擇列表只是「備註」(在朋友模型)
和我重寫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()
有比你想採取的方法更清潔/可以說更好的方法來做到這一點,但這會奏效。 – 2011-12-25 12:38:49
[self._clean_fields()](https://code.djangoproject.com/browser/django/trunk/django/forms/forms.py#L270)將第一除[self.clean()](HTTPS撥打: //code.djangoproject.com/browser/django/trunk/django/forms/forms.py#L297)這是整個形式的方法,除了會在self._clean_fields()[self.clean(value)]( https://code.djangoproject.com/browser/django/trunk/django/forms/forms.py#L287) – ruandao 2011-12-27 00:28:49