Я хочу использовать Комментарий к двум вещам:
1 - комментарий к посту
2 - ответ на комментарий
Я могу использовать модель «Комментарий» для комментирования сообщений:
me = User.objects.get(pk=1)
post = Post.objects.get(pk=1)
comment = Comment.objects.create(user=me, body='the comment', content_object=post)
post.comments.all()
<QuerySet [<Comment: the comment>, <Comment: post level comment>]>
но я не могу получить доступ к комментариям из самого экземпляра Comment:
reply = Comment.objects.create(user=me, body='reply level comment', content_object=comment)
reply.content_object
<Comment: the comment>
comment.replies.all()
<QuerySet []>
Как видите, доступ к Comment.replies.all () не возвращает экземпляр Comment, связанный с самим собой.
Вот мои модели.py:
from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from taggit.managers import TaggableManager
User = get_user_model()
# Create your models here.
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="comments")
date = models.DateTimeField(auto_now_add=True)
body = models.CharField(max_length=1000)
replies = GenericRelation("self", related_query_name='replies')
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type", "object_id")
def __str__(self):
return self.body
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="posts")
title = models.CharField(max_length=260)
body = models.TextField()
is_published = models.BooleanField(default=True)
comments = GenericRelation(Comment, related_query_name='comments')
views = models.IntegerField(default=0)
tags = TaggableManager()
def __str__(self):
return self.title