簡體   English   中英

Django Factory boy用法

[英]Django Factory boy usage

給定以下模型:

from django.db import models


class A(models.Model):
    foo = models.TextField()


# B inherits from A, it's not abstract so it should 
# create a table with a foreign key relationship
class B(A):
    bar = models.TextField()

並使用DjangoModel工廠進行以下測試:

from django.test import TestCase
import factory
from factory.django import DjangoModelFactory
from .models import A, B


class AFactory(DjangoModelFactory):
    foo = factory.Faker('name')

    class Meta:
        model = A


class BFactory(DjangoModelFactory):
    bar = factory.Faker('name')

    class Meta:
        model = B


class BTestCase(TestCase):
    def test_1(self):
        b = BFactory()
        print(b.foo)  # prints ''

如何獲取b.foo來引用具有有效foo屬性的實際A實體?

此刻b.foo只是返回一個空字符串。 但是,如果我使用AFactory創建一個A實體,則該實體具有正確填充的foo字段:

>>> a_ent = AFactory()
>>> a_ent.foo
'Nicholas Williams'

我希望BFactory為我創建b可以引用的A實體。

那可能嗎?

您只需要從AFactory擴展BFactory:

class AFactory(DjangoModelFactory):
    foo = factory.Faker('name')

    class Meta:
        model = A


class BFactory(AFactory):
    bar = factory.Faker('name')

    class Meta:
        model = B

b = BFactory()
print(b.foo)  # Robert Rogers
print(b.bar)  # Maria Clark

BFactory用於通過B模型創建數據庫記錄,因此要實現此目的,您需要在BFactory上定義工廠字段。 這可以通過上面的繼承輕松完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM