pytest失败测试django表单

我不确定下面的断言为什么会失败。

有人可以给我反馈吗,我是Django的pytest的新手。

test.forms

@pytest.fixture
def product():
    month = Month.objects.create(name="november",slug="november")

    user = User.objects.create(username="james",password="password")

    obj = Product.objects.create(
                                user=user,name="broom",price=19.99,quantity=1,month=month,)


    data = {
        'user':user,'name':obj.name,'price':obj.price,'quantity':obj.quantity,'month':month
    }

    form = ProductForm(data=data)
    yield form

def test_product_form_with_data(product):
    assert True is not None
    assert True == product.is_valid()

下面是从终端获得的信息。

跟踪错误。

_______________________________________________________________________________________ test_product_form_with_data ________________________________________________________________________________________

product = <ProductForm bound=True,valid=False,fields=(name;price;quantity;month)>

    def test_product_form_with_data(product):
        assert True is not None
>       assert True == product.is_valid()
E       assert True == False
E         -True
E         +False

tests/test_forms.py:42: AssertionError

models.py

class Product(models.Model):
    month = models.ForeignKey(Month,on_delete=models.CASCADE,related_name='months')
    user = models.ForeignKey(User,related_name='users')
    name = models.CharField(max_length=30)
    slug = models.SlugField(max_length=30,db_index=True,blank=True)
    price = models.DecimalField(max_digits=10,decimal_places=2)
    quantity = models.PositiveSmallIntegerField(default=0)  
    created = models.DateTimeField(default=datetime.datetime.now())
    is_active = models.BooleanField(default=True)

forms.py

class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = [
                'name','price','quantity','month',]

我非常感谢您提供反馈,以帮助我了解尝试在使用Fixture时使用数据测试此表单时做错的事情。

yxfwade3 回答:pytest失败测试django表单

问题在于monthForeignKey,因此您需要在data中传递对象ID,如下所示:

data = {
    'user':user,'name':obj.name,'price':obj.price,'quantity':obj.quantity,'month':month.pk,}

user也会遇到相同的问题,但是实际上user不在表单处理的字段列表中(请查看ProductForm.Meta.fields),因此它将被忽略。您可以决定将其从数据中删除或将其添加到fields

本文链接:https://www.f2er.com/3088578.html

大家都在问