Django如何在查询中选择外来值

时间:2014-03-30 20:00:11

标签: mysql sql django

拥有以下型号:

User(models.Model):
    ...
    login = ...

Asset(models.Model):
    user = models.ForeignKey(User)
    ...

如何使用django QuerySet功能选择用户登录资产查询。例如:

Asset.objects.extra(select = {'user_login' : 'user__login'})

使用每个模型对象中的user_login字段返回查询集

3 个答案:

答案 0 :(得分:0)

每个Asset对象都有一个用户的外键。所以你总是可以访问 -

asset = Asset.objects.get(pk=any_id)
if asset.user.login == 'some_value':
    do_some_magic()

请阅读the documentation

答案 1 :(得分:0)

使用.select_related('user')在单个查询中选择所有资产和相关用户。然后只需通过asset.user.login访问它。

assets = Asset.objects.selec_related('user').filter(<any filter>)

for asset in assets:
    # no additional queries here, as the user objects are preloaded into memory
    print asset.user.login

答案 2 :(得分:0)

我找到了以下解决方案:

Asset.object.extra( select = {'user_login' : '`%s.%s`' % (User._meta.db_table, 'login') } ).order_by('user__login')

order_by表达式用于在User的模型表上创建JOIN,而用户的登录可以在user_table.login中的SELECT表达式中访问