默认方法参数中的Django objects.count()返回0

时间:2015-04-10 10:10:26

标签: python django python-3.x django-models

我仍然是Django的新手,对以下内容感到非常困惑:

我的测试有一个辅助函数,它创建一个模型“Product”的实例,设置一些属性并将实例保存到db:

def createTestProduct(product_group="VG", opno="MyProduct"+str(Product.objects.count())):
    p = Product()
    p.product_group = product_group
    p.own_product_no = opno
    p.save()
return p

当我从TestCase调用此函数时,默认参数“opno”无法在db中获得正确数量的产品:

class ProductListPageTest(TestCase):

    def test_product_list_displays_products(self):
        createTestProduct()
        print("# of Products: " + str(Product.objects.count()))
        print(Product.objects.all())
        createTestProduct()
        print("# of Products: " + str(Product.objects.count()))
        print(Product.objects.all())
        ...

结果输出是(产品模型的__str__方法输出own_product_no属性):

# of Products: 1
[<Product: MyProduct0>]
# of Products: 2
[<Product: MyProduct0>, <Product: MyProduct0>]

我的目的是让产品编号:MyProduct0,Myproduct1 ...... 任何人都可以指出我的错误吗? 非常感谢提前! Fildc

1 个答案:

答案 0 :(得分:2)

函数参数在定义时评估一次,因此您不应该使用def语句中的任何计算。这种情况的解决方法是:

def createTestProduct(product_group="VG", opno=None):
    if opno is None:
        opno = "MyProduct%s" % Product.objects.count()
    ...