字段 'id' 需要一个数字,但得到了 ''

Posted

技术标签:

【中文标题】字段 \'id\' 需要一个数字,但得到了 \'\'【英文标题】:Field 'id' expected a number but got ''字段 'id' 需要一个数字,但得到了 '' 【发布时间】:2021-08-31 10:25:23 【问题描述】:

我正在尝试在其个人资料页面中显示特定用户的所有帖子。因此,如果有人访问我的个人资料页面,他们可以看到我的所有帖子等等。

all_post_by_user = Log.objects.filter(author=username)

我正在通过特定用户名获取帖子。作者在models.py中定义

username 作为参数传递给视图..

我收到错误

views.py:

@verified_email_required
@login_required
def profile(request, username):
    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=request.user)
        p_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)
        if u_form.is_valid and p_form.is_valid():
            u_form.save()
            p_form.save()
            message = messages.success(request, f'Your profile has been updated')
            return redirect('profile', username=username)

    else:
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile)
    try:
        profile = User.objects.get(username=username)
    except User.DoesNotExist:
        message = messages.warning(request,f'Profile not found for username')

        return redirect('home')
        profile = ''

    print('profile name: ',profile.username)

    all_post_by_user = Log.objects.filter(author=username)
    print(all_post_by_user)
    context = 
        'u_form' : u_form,
        'p_form' : p_form,
        'profile' : profile, 
        'all_post_by_user' : all_post_by_user
    

    return render(request, 'users/profile.html', context)

如果我把它改成all_post_by_user = Log.objects.filter(author=request.user)就可以了

models.py:

class Log(models.Model):
    title = models.CharField(blank=False, max_length=500)
    content = models.TextField(blank=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slug = models.SlugField(max_length=50, null=False, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE,null=True, blank=True)
    image = models.ImageField(
        upload_to='images', blank=True)

【问题讨论】:

这个问题很可能是您试图通过主键获取记录,但传递的是用户名字符串。您可以编辑您的问题以省略模板代码但包含您的视图函数/类吗? 我已经做到了。 【参考方案1】:

你应该过滤:

all_post_by_user = Log.objects.filter(<b>author__username=username</b>)

因为我们寻找Log 的对象,其中authorusername 与给定的username 相同。

【讨论】:

你能回答这个问题吗? link【参考方案2】:

您的查询集的问题是您尝试查询相关模型的主键,但传递的是作者的姓名而不是他们的 ID。

当您使用 author=&lt;value&gt; 时,Django 会将其视为 author_id=&lt;value&gt;。如果您想使用作者模型上的字段过滤查询集,则需要像这样使用__

all_post_by_user = Log.objects.filter(author__name=username)

现在,当 Django 编译查询时,您将根据作者姓名而不是主键进行过滤。

【讨论】:

Related Field got invalid lookup: name 更改时出现此错误 嗯,是的...您需要将name 更改为您尝试执行查找的任何字段。以上是一个示例,因为我不知道您的 Author 模型有哪些字段。 Author是Log模型author = models.ForeignKey(User, on_delete=models.CASCADE,null=True, blank=True)中的一个字段 @Synctactic Fructose,你找到解决办法了吗? 解决方法如上。您需要做的就是使用您尝试在 @Anirudh 上查找的相关字段,我以 name 为例。将 name 替换为与您的 User 模型上的用户名对应的任何字段

以上是关于字段 'id' 需要一个数字,但得到了 ''的主要内容,如果未能解决你的问题,请参考以下文章

字段“id”需要一个数字,但得到了 ObjectId

获取 ValueEerror:字段 'id' 需要一个数字,但得到一个 html

类型错误:字段 'id' 需要一个数字,但得到 (<Group: customer>, True) DJANGO ERROR

类型错误:字段 'id' 需要一个数字,但得到 <django.contrib.auth.models.AnonymousUser object at 0x048C7E90>

用增量数字填充字段需要啥 MySQL 语句

得到“<Team:jaja>”的错误需要有一个字段“id”的值才能使用这种多对多关系