字段 '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
的对象,其中author
的username
与给定的username
相同。
【讨论】:
你能回答这个问题吗? link【参考方案2】:您的查询集的问题是您尝试查询相关模型的主键,但传递的是作者的姓名而不是他们的 ID。
当您使用 author=<value>
时,Django 会将其视为 author_id=<value>
。如果您想使用作者模型上的字段过滤查询集,则需要像这样使用__
:
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' 需要一个数字,但得到了 ''的主要内容,如果未能解决你的问题,请参考以下文章
获取 ValueEerror:字段 'id' 需要一个数字,但得到一个 html
类型错误:字段 'id' 需要一个数字,但得到 (<Group: customer>, True) DJANGO ERROR
类型错误:字段 'id' 需要一个数字,但得到 <django.contrib.auth.models.AnonymousUser object at 0x048C7E90>