Factory Boy с моделями Django ManyToMany - PullRequest
1 голос
/ 28 июня 2019

У меня 3 модели на одном модуле, app.models.py, как показано ниже. Некоторые другие модели могут появляться в коде, но это не имеет значения.

Optionals

class Optional(models.Model):
    name = models.CharField(_('Nome'), max_length=255)
    type = models.CharField(_('Tipo'), max_length=50, null=True, blank=True)
    description = models.TextField(_('Descrição'), null=True, blank=True)
    provider = models.ForeignKey('providers.Provider', null=True, blank=True)
    charge = models.ForeignKey('Charge', null=True, blank=True)

    def __str__(self):
        return self.name

покрытие

class Coverage(models.Model):
    code = models.CharField(_('Código'), max_length=20, null=True, blank=True)
    vehicle_code = models.CharField(_('Código do veículo (ACRISS)'), max_length=4, null=True, blank=True)
    charge = models.ForeignKey('Charge', null=True, blank=True)

Автомобиль

class Vehicle(models.Model):

    code = models.CharField(_('Código'), max_length=100)
    description = models.CharField(_('Descrição'), max_length=255, null=True, blank=True)
    model = models.CharField(_('Modelo'), max_length=100, null=True, blank=True)
    brand = models.CharField(_('Fabricante'), max_length=100, null=True, blank=True)
    group = models.ForeignKey('Group', null=True, blank=True)
    optionals = models.ManyToManyField('Optional', related_name='vehicle_optional')
    coverages = models.ManyToManyField('Coverage', related_name='vehicle_coverage')

    def __str__(self):
        return self.code

Я пытаюсь создать светильники из этой модели, используя factory_boy .

class CoverageFactory(factory.Factory):
    class Meta:
        model = Coverage
    charge = factory.SubFactory(ChargeFactory)

class OptionalFactory(factory.Factory):
    class Meta:
        model = Optional
    provider = factory.SubFactory(ProviderFactory)
    charge = factory.SubFactory(ChargeFactory)

class VehicleFactory(factory.Factory):
    class Meta:
        model = Vehicle
    group = factory.SubFactory(GroupFactory)
    optionals = factory.SubFactory(OptionalFactory)
    coverages = factory.SubFactory(CoverageFactory)

На моих тестах это делается следующим образом:

optional = OptionalFactory(
    name="GPS",
    type="13",
    description="",
    charge=charge,
    provider=provider
)

coverage = CoverageFactory(
    code="ALI",
    vehicle_code="ABCD",
    charge=charge
)

vehicle = VehicleFactory(
    code="ECMM",
    description="GRUPO AX - MOVIDA ON",
    model="MOBI LIKE, OU SIMILAR",
    brand="",
    optionals=optional,
    coverages=coverage
)

И когда я запускаю тесты с pytest-django , я получаю эту ошибку.

ValueError: "<Vehicle: ECMM>" needs to have a value for field "id" before this many-to-many relationship can be used.

Я читал документы factory_boy о Простых отношениях «многие ко многим» и «Многие ко многим» со сквозным , но не могу исправить.

...