默认方法参数中的 Django objects.count() returns 0
Django objects.count() in default method parameter returns 0
我还是 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" 未获得数据库中正确的产品数:
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())
...
结果输出是(Product 模型的 __str__
方法输出 own_product_no
属性):
# of Products: 1
[<Product: MyProduct0>]
# of Products: 2
[<Product: MyProduct0>, <Product: MyProduct0>]
我的意图是为产品编号:MyProduct0、Myproduct1...
谁能指出我的错误?
非常感谢!
菲尔德
函数参数在定义时计算一次,因此您不应在 def
语句中使用任何计算。这种情况的解决方法是:
def createTestProduct(product_group="VG", opno=None):
if opno is None:
opno = "MyProduct%s" % Product.objects.count()
...
我还是 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" 未获得数据库中正确的产品数:
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())
...
结果输出是(Product 模型的 __str__
方法输出 own_product_no
属性):
# of Products: 1
[<Product: MyProduct0>]
# of Products: 2
[<Product: MyProduct0>, <Product: MyProduct0>]
我的意图是为产品编号:MyProduct0、Myproduct1... 谁能指出我的错误? 非常感谢! 菲尔德
函数参数在定义时计算一次,因此您不应在 def
语句中使用任何计算。这种情况的解决方法是:
def createTestProduct(product_group="VG", opno=None):
if opno is None:
opno = "MyProduct%s" % Product.objects.count()
...