Я хочу создать две новые модели django (клиенты и советники) в моем текущем приложении и создать некоторые тестовые данные с фабрикой. Проблема в том, что я не могу определить имя пользователя в моей модели, состоящее из имени и фамилии (разделенных точкой), и не знаю, как обрабатывать эту переменную в заводских настройках. Кроме того, я не уверен, как экземпляр консультанта узнает обо всех своих клиентах.
В коде у меня есть сначала два определения классов и следующие два фабричных класса для создания примеров данных.
Из файла 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())
Ожидаемое поведение должно состоять в том, что я создаю экземпляр любого класса с заданными именем и фамилией, и имя пользователя создается автоматически. Также в фабричных классах я сначала создаю советников, а затем клиентов, в то время как клиенты назначаются советнику случайным образом с помощью функции Итератор.