>source

나는 아니오를 추가하려고합니다. 내 Django 프로젝트의 게시물과 관련된 댓글입니다. 그러나 나는 계속 받고 'Post' object has no attribute 'comment_set' 어떤 이유로 AttributeError는 이유를 이해하지 못합니다.

내 프로젝트에 포스트 모델이 있습니다.

class Post(models.Model):
    title = models.CharField(max_length=100, unique=True)
    ----------------------------------------
    # To know how many comments
    def num_comments(self):
        return self.comment_set.all().count() <--------- Error from here
class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="commented_users")
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="commented_posts")
    content = models.TextField(max_length=160)
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now=True)

다음은 sthe views.py입니다.

class UserOnlyPostListView(ListView):
    model = Post
    template_name = "score/user_only_posts.html"
    context_object_name = 'posts'
    paginate_by = 4
    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(designer=user).order_by('-date_posted')
    def get_context_data(self, *args, **kwargs):
        context = super(UserOnlyPostListView, self).get_context_data()
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return context

다음은 템플릿입니다.

{% for post in posts %}
<td>{{ post.num_comments }}</td>
{% endfor %}

내 질문: 이 오류가 발생하는 이유와 해결 방법은 무엇입니까?

감사합니다

  • 답변 # 1

    comment_set 기본값입니다. related_name django는 특정 인스턴스를 가리키는 모든 주석을 얻습니다. Post .

    그러나 당신은 related_name="commented_posts" , 이는 기본값을 의미합니다. comment_set 덮어 써야합니다. post.commented_posts 보다는 post.comment_set .

    참고 : 다른 관련 이름을 사용하는 것이 좋습니다. post.commented_posts (게시물이 아닌 일련의 댓글을 반환하기 때문에) 약간 혼란 스럽습니다. 관련 이름 comments 더 좋을 것입니다. 그렇게하면 post.comments .

  • 답변 # 2

    대신에

    return self.comment_set.all().count()
    
    

    당신은 사용해야합니다

    return self.commented_posts.all().count()
    
    

    당신의

    post = models.ForeignKey(Post, on_delete=models.CASCADE,
                             related_name="commented_posts")
    
    

    related_name을 삭제하면 comment_set으로 이동합니다.

  • 이전 Julia에서 3D 배열을 회전하는 방법이 있습니까?
  • 다음 Django 인라인 모델 폼셋과 인라인 모델 폼은 초기 처리 방식이 다릅니다