我修改了一种形式来制作模型ChoiceField,以便用户只能选择他们设置的类别。当我在浏览器中运行我的应用程序时,这正常工作,但未能通过测试(因为它说表单是无效的),如果您删除ModelsChoiceField并允许其显示模型中的所有类别,则可以通过。
。我很高兴该表格的代码按预期和浏览器中的要求运行;这是我想修复的测试案例。我想我看不到一些很明显的东西,因为我已经看了很多次了。
从测试用例中提取
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())
提取从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)
您需要将user
作为Kwarg传递:
form = MyModelForm({'title': 'title1', 'category': 1, 'amount': 100, 'date': now,}, user=user)