繁体   English   中英

Django过滤外键字段

[英]Django filter foreignkey field

简洁版本:

我有一个用于配方的Django应用程序,并希望过滤数据以便在我的视图中发送到模板。 我基本上希望特定用户添加的所有接收都作为上下文发送。 以下过滤返回int()的错误消息无效文字,基数为10: my_username

recipes = Recipe.objects.filter(added_by = uname)

变量uname从模板传递。 另一方面,对request.user进行过滤工作正常,但不是我想要的。

recipes = Recipe.objects.filter(added_by = request.user)

细节:

我的模型给出(相关领域):

class Recipe (models.Model):
    ...
    ...
    added_by = models.ForeignKey(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]将filter参数更改为recipe__added_by__added_by = uname ,但是Django然后返回了一个错误,上面写着“无法将关键字'配方'解析为字段”,这看起来很明显。 我的网址是:

url(r'^profile/([a-zA-Z0-9]+)/$', 'profile', name='*app_name*-profile'),

谢谢你的回复。 对不起,如果这应该是显而易见的。

[1] Django模型按外键过滤

您可以尝试:

 recipes = Recipe.objects.filter(added_by__username = uname)

并且request.user适用于Recipe.objects.filter(added_by = request.user)因为request.user是一个对象。 详情: https//docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

当子类定义为

class Recipe (models.Model):
    ...
    ...
    added_by = models.ForeignKey(User)

makemigration生成外键为added_by_id 因此,您必须在过滤器中使用相应的字段名称。

例如: recipes = Recipe.objects.filter(added_by_id = uname)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM