2015-12-16 1 views
4

J'ai un ModelForm qui contient quelques ForeignKey, disons à l'objet User mais il pourrait s'agir de n'importe quel autre modèle. J'ai une classe de test unitaire pour ce formulaire, mais lorsque j'essaie de lui transmettre des données, j'obtiens une erreur Select a valid choice. That choice is not one of the available choices. Le test ressemble donc:Django forme des tests unitaires avec ForeignKey

class Monkey(Model): 
    user = models.ForeignKey(User) 
    ... 

class MyForm(ModelForm): 
    class Meta: 
     model = Monkey 
     fields = ['user', ...] 

def test_my_form_with_a_user(self): 
    ... 
    data = {'user': User.objects.get(pk=1), ... } # Nope. 
    data = {'user': [u'1'], ... } # Nope. 
    data = {'user': [u'JaneDoe'], ... } # Nope. 
    form = MyForm(data, ...) 
    self.assertTrue(form.is_valid(), form.errors) 
    ... 

J'ai essayé un certain nombre de permutation pour le user mais je reçois la même erreur.

Qu'est-ce qui me manque?

+0

Avez-vous d'autres champs de choix sous la forme? –

+0

@ LorenzoPeña: Pourquoi est-ce important? – Sardathrion

Répondre

6

Vous devriez être en mesure d'attribuer une valeur à votre champ utilisateur dans le test en utilisant les éléments suivants:

def test_my_form_with_a_user(self): 
    user_pk = User.objects.get(pk=1).pk 
    data = {'user': user_pk} 
    ... 
+0

Cela n'a pas fonctionné au début, puis après avoir regardé le formulaire, il a filtré certains utilisateurs. L'un (pk = 1) n'était pas valide. Gah. Je suis arrivé à la fin. Je vous remercie. – Sardathrion

+1

Pas de problème. J'ai fait la même chose moi-même! –