如何在 Django 中使用 factoryboy 的 SubFactory 处理可空字段?

问题描述

我想让 nullableStoreFactory 存储属性
如果我给出商店名称,我希望它返回现有的商店对象。

但是,它引发了错误

我使用 SubFactory 创建了 store 字段。但它不能懒惰地检查event_type

如何使用现有的 store 对象获取 EventFactory 实例?

events/models.py:


SELL_DIRECT = "SD"
ORDER_PRODUCT = "OP"
SEND_PRODUCT = "SP"
SETTLE_SALE = "SS"
LEAVE_STORE = "LS"
DEFECT_PRODUCT_IN_STORE = "DS"
DEFECT_PRODUCT_IN_HOME = "DH"

EVENT_TYPE_CHOICES = (
    (SELL_DIRECT,"개인판매"),(ORDER_PRODUCT,"제품발주"),(SEND_PRODUCT,"입점처 입고"),(SETTLE_SALE,"판매내역정산"),(LEAVE_STORE,"입점처 퇴점"),(DEFECT_PRODUCT_IN_STORE,"불량:입점처"),(DEFECT_PRODUCT_IN_HOME,"불량:집"),)

EVENT_TYPES_ABOUT_STORE = set(
    [SEND_PRODUCT,SETTLE_SALE,LEAVE_STORE,DEFECT_PRODUCT_IN_STORE]
)


class Store(TimestampedModel):
    """ 입점처 """

    name = models.CharField(_("이름"),max_length=50,unique=True)
    description = models.TextField(_("설명"))


class Event(TimestampedModel):
    """ 재고 변화 내역 """

    event_type = models.CharField(
        _("재고 변화 타입"),choices=EVENT_TYPE_CHOICES,max_length=2
    )
    store = models.ForeignKey(
        "Store",verbose_name=_("입점처"),on_delete=models.CASCADE,blank=True,null=True,)
    description = models.TextField(_("설명"))

events/factories.py:


import factory
from events.models import (
    EVENT_TYPES_ABOUT_STORE,EVENT_TYPE_CHOICES,)


class StoreFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = "events.Store"
        django_get_or_create = ("name",)

    name = factory.Sequence(lambda n: f"store_{n}")
    description = factory.Sequence(lambda n: f"description_{n}")


class EventFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = "events.Event"

    event_type = factory.Faker(
        "random_element",elements=[choice[0] for choice in EVENT_TYPE_CHOICES]
    )
    description = factory.Sequence(lambda n: f"event_{n}")

    @factory.lazy_attribute
    def store(self):
        if self.event_type in EVENT_TYPES_ABOUT_STORE:
            return StoreFactory()
        return None

入[20]:Store.objects.last()出[20]:

在 [21]: EventFactory.build(store__name='store_10').store Out[21]: ...

AttributeError: 参数“store__name”未知。评估 属性是 {'event_type': 'DS','description': 'event_4'},定义是 ,“描述”:,“商店”:,'store__name': 'store_10'}>.

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...