通过工厂自动创建用户名和数据的Django模型

时间:2019-05-07 14:57:12

标签: django django-models python-3.6 factory

我想在当前应用程序中创建两个新的django模型(客户端和顾问),并使用工厂创建一些测试数据。问题是我无法在模型中自动定义由名字和姓氏(用点分隔)组成的user_name,并且不知道如何在出厂设置中处理该变量。另外,我不确定顾问实例如何知道他们拥有的所有客户端。

在代码中,我首先有两个类定义,然后有两个工厂类用于创建示例数据。

来自models.py文件

from django.db import models
from django.utils import timezone
import factory
import factory.django


class Client_Profile(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    advisor = models.ForeignKey("Advisor_Profile", null=True, on_delete=models.SET_NULL)

    def __str__(self):
        return f"{self.first_name} {self.last_name} Client Profile"

    def _get_user_name(self):
        return f"{self.first_name}.{self.last_name}"

    user_name = property(_get_user_name)


class Advisor_Profile(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    user_name = models.CharField(max_length=255)

    def __str__(self):
        return f"{self.first_name} {self.last_name} Advisor Profile"

    def _get_user_name(self):
        return f"{self.first_name}.{self.last_name}"

    user_name = property(_get_user_name)

class Advisor_Profile_Factory(factory.django.DjangoModelFactory):
    class Meta:
        model = Advisor_Profile

    first_name = factory.Faker("first_name")
    last_name = factory.Faker("last_name")
    user_name = f"{first_name}.{last_name}"

class Client_Profile_Factory(factory.django.DjangoModelFactory):
    class Meta:
        model = Client_Profile

    first_name = factory.Faker("first_name")
    last_name = factory.Faker("last_name")
    user_name = f"{first_name}.{last_name}"

    advisor = factory.Iterator(Advisor_Profile.objects.all())

预期的行为应该是我使用给定的名字和姓氏创建任一类的实例,并且用户名会自动创建。同样在工厂类中,我首先创建顾问程序,然后再创建客户端,同时通过Iterator函数将客户端随机分配给顾问程序。

0 个答案:

没有答案