Модель Django с автоматическим созданием имени пользователя и данных через фабрику - PullRequest
0 голосов
/ 07 мая 2019

Я хочу создать две новые модели 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())

Ожидаемое поведение должно состоять в том, что я создаю экземпляр любого класса с заданными именем и фамилией, и имя пользователя создается автоматически. Также в фабричных классах я сначала создаю советников, а затем клиентов, в то время как клиенты назначаются советнику случайным образом с помощью функции Итератор.

...