Как написать тестовый пример для модели Django, у которой все поля являются foreignkey в DRF?

У меня есть модель, все поля которой являются внешними ключами для других моделей. Как мы можем создать тестовый пример в Django rest framework в таком случае?

У меня есть следующая модель:

class Example(models.Model):

    package = models.ForeignKey(
        Destination, related_name="packages", on_delete=models.CASCADE
    )

    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        null=True,
        related_name="user_packages",
    )

    tour = models.ForeignKey(
        Tours,
        on_delete=models.CASCADE,
        null=True,
        related_name="tour_packages",
    )

В модели Django, когда есть только одно поле, это можно сделать следующим образом:

class NewsLetter(models.Model):
         NewsLetterID = models.AutoField(primary_key=True)
         Email = models.CharField(max_length=255)
         Connected = models.BooleanField(default=False)
         UserID = models.ForeignKey(User, on_delete=models.CASCADE)
         class Meta:
              db_table = 'NewsLetter'

@classmethod
def setUpTestData(cls):
    #Set up non-modified objects used by all test methods
    user = User.objects.create(<fill params here>)
    NewsLetter.objects.create(NewsLetterID=1, Email='test@test.com', Connected=False,UserID=user)

Так что даже если я создал все объекты для всех полей с иностранными ключами, как в этом примере, дело в том, что для моделей связанных полей, они сами имеют поля с иностранными ключами. Как мы можем к этому подойти? Например, в моей модели Example модель Destination сама связана с другими полями с внешним ключом. Как же создать модульный тест для создания api для этой модели примера?

Я думаю, что вы подходите к этому правильно: Вы должны установить все необходимые тестовые экземпляры в правильном порядке и связать их соответствующим образом.

Чтобы сделать это менее громоздким и более читаемым, вы можете использовать проект типа factory_boy для генерации фабрик приспособлений. Тогда ваша установка может выглядеть примерно так:

import factory

# Define your factories
class PackageFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = 'yourapp.Package'

class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = 'yourapp.User'

class TourFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = 'yourapp.Tour'

class ExampleFactory(factory.django.DjangoModelFactory):
    package = factory.SubFactory(PackageFactory)
    user = factory.SubFactory(UserFactory)
    tour = factory.TourFactory(TourFactory)

    class Meta:
        model = 'yourapp.Example'

# And now, create a new example instance together with all related models:
example = ExampleFactory()
Вернуться на верх