Python Django过滤器外键字段
短版: 我有一个用于食谱的Django应用程序,希望筛选要发送到我视图中模板的数据。我基本上希望由特定用户添加的所有接收器都作为上下文发送。以下筛选返回错误消息以10为基数的int()无效文本:my_usernamePython Django过滤器外键字段,python,django,filter,foreign-keys,Python,Django,Filter,Foreign Keys,短版: 我有一个用于食谱的Django应用程序,希望筛选要发送到我视图中模板的数据。我基本上希望由特定用户添加的所有接收器都作为上下文发送。以下筛选返回错误消息以10为基数的int()无效文本:my_username recipes = Recipe.objects.filter(added_by = uname) 变量uname是从模板传递的。另一方面,request.user可以很好地过滤,但这不是我想要的 recipes = Recipe.objects.filter(added_by
recipes = Recipe.objects.filter(added_by = uname)
变量uname是从模板传递的。另一方面,request.user可以很好地过滤,但这不是我想要的
recipes = Recipe.objects.filter(added_by = request.user)
详细信息:
我的模型(相关字段)如下所示:
其中用户是现有的Django用户。当我在模板中调用{{recipe.added_by}}时,我得到了想要的用户名。此用户名通过href=“/profile/{{recipe.added_by}}”传递到视图,其中视图如下所示:
def profile(request, uname):
print uname #Correct username printed
print request.user #Logged in user (not relevant, as userprofile should be visible for all)
recipes = Recipe.objects.filter(added_by = uname) #Does not work. Why?
#recipes = Recipe.objects.filter(added_by = request.user)
form = CommentForm(request.POST)
context = {
'uname': uname,
'recipes': recipes,
'form': form,
}
return render(request, '*app_name*/profile.html', context)
我不确定我遗漏了什么,但从我所知道的来看,这似乎与added_by向用户提供外键这一事实有关。我还试图根据[1]将筛选器参数更改为recipe_uuuadded_by_uuadded_by=uname,但Django随后返回一个错误,称“无法将关键字“recipe”解析为字段”,这似乎很明显。我的网址是:
url(r'^profile/([a-zA-Z0-9]+)/$', 'profile', name='*app_name*-profile'),
谢谢你的回复。如果这是显而易见的,我很抱歉
[1] 您可以尝试以下方法:
recipes = Recipe.objects.filter(added_by__username = uname)
而
request.user
对于Recipe.objects.filter(added\u by=request.user)
很有效,因为request.user
是一个对象。详细信息:当子类定义为
class Recipe (models.Model):
...
...
added_by = models.ForeignKey(User)
makemigration将外键生成为\u id添加的。
所以,您必须在过滤器中使用相应的字段名
例如:
recipes=Recipe.objects.filter(added\u by\u id=uname)
您的Recipe.added\u by user与登录用户相同吗?我认为uname表示任何用户名,而不仅仅是登录用户的用户名。太好了!就这样。非常感谢。很高兴帮助@kennha。如果此答案解决了您的问题,请将其标记为已接受(这是答案左侧的复选标记)
class Recipe (models.Model):
...
...
added_by = models.ForeignKey(User)