J'ai deux modèles
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)
...
Je fais un formulaire pour Message
class MessageForm(ModelForm):
class Meta:
model = Message
mais quand j'affiche le formulaire en html, j'espère que j'affiche la liste de choix de to_user juste par 'remark' ( dans Friend model)
et je surcharge le MessageForm's init méthode comme la suivante :
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)
Quand les données sont postées, le form.is_valid() lève l'erreur : Impossible d'assigner "" : "Message.to_user" doit être une instance "User".
Je veux donc changer la valeur de self.fields['to_user'] avant l'appel de is_valid() :
def is_valid(self):
# do something to fix the problem
super(MessageForm, self).is_valid()