2017-12-08 4 views
0

Ich habe ein Formular geändert, um ein ModelChoiceField so zu erstellen, dass Benutzer nur die Kategorien auswählen können, die sie eingerichtet haben. Dies funktioniert ordnungsgemäß, wenn ich meine App im Browser ausführe, aber den Test nicht besteht (da das Formular nicht gültig ist), wenn das ModelChoiceField entfernt wird und alle Kategorien aus dem Modell angezeigt werden.Django-Testformular mit Modelchoicefield

Ich bin froh, dass der Code für das Formular wie erwartet funktioniert und im Browser erforderlich ist; Es ist der Testfall, den ich gerne beheben würde. Ich stelle mir vor, dass etwas offensichtlich ist, das ich nicht sehen kann, weil ich es zu oft angeschaut habe. Kann mir bitte jemand helfen?

Auszug aus Testfall

def setUp(self): 
    user = User.objects.create(username='user', password='') 
    self.category = Category.objects.create(id=1, user=user, title='category1') 
    self.myitem = MyModel.objects.create(id=1, user=user, title='title1', amount=10, category=self.category) 

def test_form_validation_with_valid_data(self): 
    user = User.objects.get(username='user') 
    now = timezone.now() 
    form = MyModelForm({'title': 'title1', 'category': 1, 'amount': 100, 'date': now,}, user) 
    self.assertTrue(form.is_valid()) 

Auszug aus forms.py

class MyModelForm(forms.ModelForm): 

    class Meta: 
     model = MyModel 
     fields = ('title', 'category', 'amount', 'date',) 

    category = forms.ModelChoiceField(queryset=None) 

    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user') 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     self.fields['category'].queryset = Category.objects.filter(user=self.user) 
+0

etwas Druck/hinzufügen Einloggen auf Figur was schief läuft. Überprüfen Sie den Wert von 'form.errors',' self.user' und 'self.fields ['category']. Queryset'. Es könnte Ihnen einen Hinweis geben, was falsch gelaufen ist. – Alasdair

Antwort

1

Sie benötigen user als kwarg weitergeben müssen:

form = MyModelForm({'title': 'title1', 'category': 1, 'amount': 100, 'date': now,}, user=user) 
+0

Das ist es! Vielen Dank. – pasta1020

Verwandte Themen