2017-01-20 15 views
2

私は私のdjangoアプリのコメントシステムを作っています。コメント投票用に別々のモデルを作るのが最善だと言われました。だから私はそれをやったし、ここで私のmodels.pyです:テンプレートにForeignKeyフィールドをレンダリングするにはどうすればよいですか?

def article(request, category, id): 

    name = resolve(request.path).kwargs['category'] 
    for a, b in CATEGORY_CHOICES: 
     if b == name: 
      name = a 
      instance = get_object_or_404(Post, id=id, category=name) 

    allauth_login = LoginForm(request.POST or None) 
    allauth_signup = SignupForm(request.POST or None) 


    #comments 
    comment = CommentForm(request.POST or None) 
    ajax_comment = request.POST.get('text') 
    comment_length = len(str(ajax_comment)) 

    #database_comment = get_object_or_404(Comments, comment_id=1) 
    comment_list = Comment.objects.filter(destination=id) 
    score = CommentScore.objects.filter(comment=comment_list) 

    if request.is_ajax(): 
     if comment.is_valid(): 
      comment = Comment.objects.create(comment_text=ajax_comment, author=str(request.user), destination=id) 
      print(comment) 
      comment.save() 

      score = CommentScore.objects.create(comment=comment) 
      score.save() 
      username = str(request.user) 
      return JsonResponse({'text': ajax_comment, 'text_length': comment_length, 'username': username}) 
     else: 
      print(comment.errors) 

    context = { 
     'score': score, 
     'comment_list': comment_list, 
     'comment': comment, 
     'instance': instance, 
     'allauth_login': allauth_login, 
     'allauth_signup': allauth_signup 
    } 

    return render(request, 'article.html', context) 

だからcommentが正常に動作しますが、よう:

class Comment(models.Model): 
     user = models.ForeignKey(User, default=1) 
     destination = models.CharField(default='1', max_length=12, blank=True) 
     author = models.CharField(max_length=120, blank=True) 
     comment_id = models.IntegerField(default=1) 
     parent_id = models.IntegerField(default=0) 
     comment_text = models.TextField(max_length=350, blank=True) 
     timestamp = models.DateTimeField(default=timezone.now, blank=True) 

     def __str__(self): 
      return self.comment_text 


    class CommentScore(models.Model): 
     user = models.ForeignKey(User, default=1) 
     comment = models.ForeignKey(Comment, related_name='score') 
     upvotes = models.IntegerField(default=0) 
     downvotes = models.IntegerField(default=0) 

     def __str__(self): 
      return str(self.comment) 

ここでコメントが作成され、私のviews.pyです私はその後、インスタンスを作成してcommentと一致させようとしています。私のテンプレートでは、私は各コ​​メントとそれのフィールド(comment_textauthorなど)をレンダリングしましたが、upvotesフィールドをそれに関連付けようとしていますcomment。どうすればいい?あなたのビューで

テンプレート

{% for i in comment_list %} 
    <div class='comment_div'> 
     <h3>{{ i.author }}</h3> 
     <p>{{ i.comment_text }}</p><br> 
    </div> 
{% endfor %} 

forms.py

class CommentForm(forms.ModelForm): 
    class Meta: 
     model = Comment 

     fields = [ 
      'comment_text', 
      'id', 
      'author', 
      'destination', 
     ] 

答えて

2

あなたは、この行があります:あなたはCommentScoreそれに取得したい場合はそう

comment_list = Comment.objects.filter(destination=id) 

を01に関連付けられていますは、あなたのビューで、次のように記述する必要があります。このように、あなたのテンプレートでupvotesにアクセスできるように

score = CommentScore.objects.filter(comment=comment_list) 

filterは、複数の変数を期待:あなたは、単一のscoreインスタンスを持っている場合

{% for i in score %}  
    {{i.upvotes}} 
{% endfor %} 

getパラメータを使用する必要があります:

score = CommentScore.objects.get(コメント=コメントリスト)

その後することができます、あなただけの

{{score.upvotes}} 

テンプレート上

+0

は '{{commentscore.upvotes}}' 'ループ{%を%}'私のテンプレートに行くことになって?私はそれをしたので、何も返さないからです。 – Zorgan

+0

あなたの投稿を更新し、あなたの全体像を表示 –

+0

フルビューとforms.pyを追加 – Zorgan

関連する問題