Django-不生成自动反向关系

问题描述 投票:0回答:1

我想让我的用户将书签添加到该帐户,但是可悲的是,每次尝试添加新书签时,都会出现以下错误:

字段'content_object'不会生成自动反向关系因此不能用于反向查询。如果是GenericForeignKey,请考虑添加GenericRelation。

models.py

bookmarkable_models = models.Q(app_label='App', model='model-a') | models.Q(app_label='App', model='model-b') | models.Q(app_label='App', model='model-c')


class UserBookmarks(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False)
    content_type = models.ForeignKey(ContentType, limit_choices_to=bookmarkable_models, on_delete=models.CASCADE, null=True, blank=False)
    object_id = models.CharField(max_length=50, blank=False)
    content_object = GenericForeignKey('content_type', 'object_id')
    date_added = models.DateTimeField(auto_now_add=True, blank=False)

    class Meta:
        verbose_name = "Bookmark"
        verbose_name_plural = "Bookmark(s)"
        ordering = ['-date_added']
python django model relation
1个回答
0
投票

由于通用关系非常通用,因此Django不会自动在您项目中的所有模型上创建反向关系。

如果您打算为特定的模型添加书签,并希望经常使用反向关系,则可以在模型中定义GenericRelation

class ModelA(models.Model):
     bookmarks = GenericRelation(UserBookmarks, related_query_name='model_a_instances')

class ModelB(models.Model):
     bookmarks = GenericRelation(UserBookmarks, related_query_name='model_b_instances')

class ModelC(models.Model):
     bookmarks = GenericRelation(UserBookmarks, related_query_name='model_c_instances')

有关更多信息:https://docs.djangoproject.com/en/3.0/ref/contrib/contenttypes/#reverse-generic-relations

© www.soinside.com 2019 - 2024. All rights reserved.