У меня 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 о Простых отношениях «многие ко многим» и «Многие ко многим» со сквозным , но не могу исправить.