2017-01-20 3 views
2

Я создаю систему комментариев для своего приложения django, и мне сказали, что лучше всего создать отдельную модель для голосования по комментариям. Так что я сделал это, и вот мой models.py:Как визуализировать поля ForeignKey в моем шаблоне?

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 где создаются комментарии:

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 работает отлично, но, как вы можете увидеть пару строк позже, я пытаюсь создать экземпляр CommentScore для соответствия с comment. В моем шаблоне я обработал каждый комментарий и его поля (comment_text, author и т. Д.), Но я хочу отобразить поле 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

На ваш взгляд у вас есть эта строка:

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

так что если вы хотите, чтобы добраться до CommentScore что связанные с Comment, вы должны написать, как это на ваш взгляд:

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

filter ожидает множественным переменной, так что вы можете получить доступ к upvotes в шаблоне, например:

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

, если у вас есть единственный score экземпляр, вы должны использовать get параметр:

оценка = CommentScore.objects.get (комментарий = comment_list)

, то вы можете просто

{{score.upvotes}} 

на шаблоне

+0

Является '{{commentscore.upvotes}}' должен идти в мой шаблон '{% для%}' цикла? Потому что я сделал это, и он ничего не возвращает. – Zorgan

+0

Обновите свой пост и показать свой полный вид –

+0

Добавлен полный вид и forms.py – Zorgan

Смежные вопросы