我想让我的用户将书签添加到该帐户,但是可悲的是,每次尝试添加新书签时,都会出现以下错误:
字段'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']
由于通用关系非常通用,因此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