Проблема с фабрикой django для GenericForeignKey

models.py

class GoogleCreative(models.Model):
    name = models.CharField
    creative_type = models.CharField
    url = models.URLField
    table_url = models.URLField
    status = models.CharField
    tags = GenericRelation(
        'CreativeTag', object_id_field='creative_id', content_type_field='creative_content_type'
    )
    


class Tag(models.Model):
    name = models.CharField(max_length=150)
    slug = models.SlugField(max_length=150, allow_unicode=True)



class CreativeTag(models.Model):
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
    creative_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    creative_id = models.PositiveIntegerField()
    creative = GenericForeignKey('creative_content_type', 'creative_id')

    class Meta:
        unique_together = ['tag', 'creative_content_type', 'creative_id']

factories.py

class GoogleCreativeFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = GoogleCreative

    name = factory.Faker('word')
    .....
    
    
    
class TagFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Tag
        django_get_or_create = ('name',)

    slug = factory.LazyAttribute(lambda o: slugify(o.name, allow_unicode=True))


class CreativeTagFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = CreativeTag
        exclude = ['creative']

    class Params:
        name = factory.Sequence(lambda n: f'tag {n}')

    tag = factory.SubFactory(TagFactory, name=factory.SelfAttribute('..name'))
    creative_id = factory.SelfAttribute('creative.id')
    creative_content_type = factory.SelfAttribute('creative.content_type')

test.py

@pytest.mark.django_db
def test_tags_removed(google_creative_factory, creative_tag_factory, user):
    creative = google_creative_factory()
    creative_tag_factory(creative=creative, name='Big Fish')

Но получаем ошибку

AttributeError: 'GoogleCreative' object has no attribute 'content_type'

Я пытаюсь решить эту проблему, добавляя новое поле creative в CreativeTagFactory и комментарий Meta exclude field

class CreativeTagFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = CreativeTag
        # exclude = ['creative']

    class Params:
        name = factory.Sequence(lambda n: f'tag {n}')

    tag = factory.SubFactory(TagFactory, name=factory.SelfAttribute('..name'))
    creative_id = factory.SelfAttribute('creative.id')
    creative_content_type = factory.SelfAttribute('creative.content_type')
    creative = factory.SubFactory(GoogleCreativeFactory)

Но получил ту же ошибку

Вернуться на верх