我想在当前应用程序中创建两个新的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函数将客户端随机分配给顾问程序。