如何检查在Django中存储为ForeignKey字段的用户名和request.user.username是否相等?

时间:2019-12-19 18:15:41

标签: python django django-models django-templates django-views

我正在用Django开发个人日记应用。在那边,我做了一个应用程序“笔记”。笔记应用程序的models.py如下所示:

from django.db import models
from datetime import datetime
from django.contrib.auth.models import User

class Note(models.Model):
    image=models.ImageField(upload_to='images/')
    title=models.CharField(default="",max_length=20)
    body=models.TextField(default="",max_length=800)
    date=models.DateField(default=datetime.now())
    publisher=models.ForeignKey(User,on_delete=models.CASCADE,default="")

    def __str__(self):
        return self.title

现在,当用户登录时,我想在其主页上仅显示他所做的注释条目。 views.py和home.html如下:

views.py:

@login_required
def home(request):
    notes=Note.objects    
    return render(request,'home.html',{'notes':notes})

home.html:

{% extends 'basic.html' %}
{% load static %}
{% block content %}
{% if error %}
{{error}}
{% endif %}
   {% for n in notes.all  %}
   {% ifequal request.user.username n.publisher  %}
   <div class="container">
   <a href="{% url 'note_app:detail' n.id %}"><h3>{{n.title}}</h3></a>
   <p>{{n.body}}</p>
   <footer>{{n.date}}</footer>
   </div>
   {% endifequal %}
   {% endfor %}
{% endblock %}

正如您在home.html中看到的那样,我正在遍历Note类的所有对象。当ifequal语句不存在时,它将显示所有用户的所有条目,但是当我放置ifequal语句以确保仅显示登录用户所做的条目时,它不会显示任何东西。有人可以告诉我如何解决这个问题吗?我绝对是Web开发领域的初学者,我事先为一个愚蠢的问题表示歉意,但我被困住了。

2 个答案:

答案 0 :(得分:1)

我相信您的错误是在views.py中 尝试使用:

notes=Note.objects.all()    

代替:

notes=Note.objects    

答案 1 :(得分:0)

您只是缺少{% ifequal %}的第二个参数。现在,您没有将任何事物进行比较。试试这个:

home.html:

{% extends 'basic.html' %}
{% load static %}
{% block content %}
{% if error %}
{{error}}
{% endif %}
   {% for n in notes.all  %}
   {% ifequal request.user n.publisher %}
   <div class="container">
   <a href="{% url 'note_app:detail' n.id %}"><h3>{{n.title}}</h3></a>
   <p>{{n.body}}</p>
   <footer>{{n.date}}</footer>
   </div>
   {% endifequal %}
   {% endfor %}
{% endblock %}

也就是说,我应该注意,您不必在模板中执行此操作。如果您在数据库中进行操作,它将更快。您可以将views.py更改为此:

@login_required
def home(request):
    notes = Note.objects.filter(publisher=request.user)
    return render(request,'home.html',{'notes':notes})

这时您甚至不需要模板中的{% ifequal %}标记。