Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django过滤器外键字段_Python_Django_Filter_Foreign Keys - Fatal编程技术网

Python Django过滤器外键字段

Python 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

短版:

我有一个用于食谱的Django应用程序,希望筛选要发送到我视图中模板的数据。我基本上希望由特定用户添加的所有接收器都作为上下文发送。以下筛选返回错误消息以10为基数的int()无效文本:my_username

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)