django 如何防止使用Faker创建相同的对象?

67up9zun  于 2023-03-09  发布在  Go
关注(0)|答案(1)|浏览(115)

我有以下工厂:

class MonthFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Month

    year = factory.Faker("random_int", min=2014, max=2022)
    month = factory.Faker("random_int", min=1, max=12)

年份和月份在我的Django类中都是唯一的:

class Meta:
    unique_together = (
        "month",
        "year",
    )

当我想为一个测试创建两个对象时,我们假设:

month1 = MonthFactory()
month2 = MonthFactory()

有时候我中了头奖,得到:

django.db.utils.IntegrityError: duplicate key value violates unique constraint

因为Faker得到了两个对象相同的月份和年份。有没有办法防止这种情况?

qxgroojn

qxgroojn1#

这看起来像是try/except使用django的数据库异常的情况。假设你在数据库中没有其他的项目(如果你有,你可能也需要在month 1中这样做)。

from django.db import IntegrityError

month2 = 0 #set a falsy value flag
while not month2: #keep going until month2 is a truthy thing
    try:
        month2 = MonthFactory()
    except IntegrityError:
        print("Bad luck, trying again")

相关问题