【问题标题】:Field 'id' expected a number but got 'xyz'字段 'id' 需要一个数字,但得到了 'xyz'
【发布时间】:2021-01-22 12:22:06
【问题描述】:

在 Models.py 中

class Post(models.Model):
    user = models.CharField(max_length=100)
    likes = models.IntegerField(default=0)
    content = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

class Profile(models.Model):
    following = models.ForeignKey('User',on_delete=models.CASCADE,related_name='following')
    user = models.ForeignKey('User',on_delete=models.CASCADE,related_name='user')
    
    def __str__(self):
        return self.user

在views.py中

def viewProfile(request,username):
    posts = Post.objects.filter(user=username).order_by('id').reverse()
    profile = Profile.objects.filter(user=username)
    no_of_followers = profile.following.count()
    return render(request, "network/profile.html",{
        "posts":posts,
        "username":username,
        "no_of_followers":no_of_followers
    })

在 profile.html 中

{% extends "network/layout.html" %}

{% block body %}
    <h2 style="margin-left: 20px;">Posts of {{username}}</h2>
    <div class="col-sm-6">
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Profile Details</h5>
            <p class="card-text">Followers:{{no_of_followers}}</p>
            <p class="card-text">Followings:0</p>
            
            <a href="#" class="btn btn-primary">Go somewhere</a>
            
        </div>
        </div>
      </div>
    {% for post in posts %}
        <div class="card" style="width:70%;margin-left: 10%;margin-right: 20%;">
            <div class="card-body">
                <a href="{% url 'viewprofile' post.user %}"><h5 class="card-title">{{post.user}}</h5></a>
                <div class="form-group">
                    <p>{{post.date}}<br>{{post.content}}</p>
                </div>
                <p>{{post.likes}}</p>
            </div>
        </div>
    {% endfor %}
{% endblock %}

遇到字段“id”期望一个数字但得到“xyz”的错误。xyz 是用户名

如果我将 profile = Profile.objects.filter(user=username) 替换为 profile = Profile.objects.filter(user__user=username),则会收到错误 django.core.exceptions.FieldError: Related Field got invalid lookup: user

【问题讨论】:

    标签: python html django django-models


    【解决方案1】:

    查找应该是:

    profile = Profile.objects.<b>get(</b>user<b>__username</b>=<i>username</i><b>)</b>

    因为您要检索Profile,而userusername 具有给定的username

    您可能应该在这里使用.get(…) [Django-doc] 来检索Profile 对象,而不是Profiles 中的QuerySet

    您可能想改用get_object_or_404(…) function [Django-doc],以便在不存在此类配置文件的情况下返回 404:

    from django.shortcuts import get_object_or_404
    
    def viewProfile(request,username):
        posts = Post.objects.filter(user__username=username).order_by('-id')
        profile = get_object_or_404(Profile, user__username=username)
        no_of_followers = profile.following.count()
        return render(request, 'network/profile.html',{
            'posts':posts,
            'username':username,
            'no_of_followers":no_of_followers
        })

    【讨论】:

    • 非常感谢......它工作......非常好的解释。我明白了,再次感谢您。
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2021-07-03
    • 2021-06-03
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多