如何使用模型中保存的字段搜索django数据库?

rqqzpn5f  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(302)

我正在尝试创建一个搜索栏,在我的日记应用程序中搜索用户。如果用户存在,我想将搜索重定向到相应的页面。我已经为该功能创建了视图函数、模板和url。
作为测试,我从django.contrib.auth.models导入了用户类,如果用户存在,我可以显示一条个性化消息。

def search_user(request):
"""Search for users."""

if request.method == "POST":
    searched = request.POST["searched"]
    usernames = User.objects.filter(username__icontains=searched)
    context = {"searched": searched, "usernames": usernames}
    return render(request, "journals/search_user.html", context)

在主模型中,journal类与user有一个foreignkey关系,它被保存到一个名为“owner”的字段中。我想以某种方式检查搜索的用户名是否与此“所有者”字段匹配。当我尝试以这种方式进行搜索时,它找不到任何数据。我希望搜索引用“所有者”的原因是,这样我就可以访问表中的其他字段。有人能指出我在这里犯的错误吗?

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

class Journal(models.Model):
    """A particular subject the user may want to write about."""

    name = models.CharField(max_length=100)
    date_added = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        """Return a string representation of the model."""

        return self.name

class Entry(models.Model):
    """Something specific the user may want to add to the journal."""

    journal = models.ForeignKey(Journal, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    date_edited = models.DateTimeField(auto_now=True)

**View Function:**

def search_user(request):
    """Search for users."""

    if request.method == "POST":
        searched = request.POST["searched"]
        usernames = Journal.objects.filter(owner=searched)
        context = {"searched": searched, "usernames": usernames}
        return render(request, "journals/search_user.html", context)
lyr7nygr

lyr7nygr1#

searched 只是一个文本字符串,而journal.owner实际上是一个 User ,所以这里没有匹配的。
匹配相关的 username 相反

usernames = Journal.objects.filter(owner__username=searched)

相关问题