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