【问题标题】:Join two models in Django filter在 Django 过滤器中加入两个模型
【发布时间】:2016-08-13 14:36:41
【问题描述】:

我可能会因为找不到合适的关键字而感到愚蠢,但这是实际的问题:
我正在尝试通过在Django 中加入两个不同的模型来选择 数据库值。
考虑以下models.py

class Token(models.Model):
    userid = models.TextField()
    access_token = models.TextField()
    refresh_token = models.TextField(default='None', null=True)

class File(models.Model):
    userid = models.ForeignKey(Token, on_delete=models.CASCADE)
    name = models.TextField()
    link = models.TextField()
    size = models.BigIntegerField()

我现在想获取来自 File 的所有文件及其对应的 access_tokenuserid
我尝试执行以下操作:

data = File.objects.filter(name__startswith='Dummystring')

这种场景下如何获取access_token?

【问题讨论】:

    标签: python django


    【解决方案1】:

    使用valuesvalues_list 连接表并获取值。使用__ to do field lookups:

    data = File.objects.filter(name__startswith='Dummystring') \
                       .values_list('userid__access_token', 'userid__userid')
    

    【讨论】:

    • 太棒了,谢谢 (+1)。我不知道您也可以在 values() 函数中进行字段查找。很快就会接受你的回答并喜欢Django(更像是PHP的家伙)。
    • 短期跟进:现在输出看起来像"userid__access_token": 'test1234',我可以去掉userid__ 前缀吗?
    • 那就是这个问题:stackoverflow.com/questions/10598940/…。如果您只需要一个或两个值,您可以只使用values_list,对吗?它基本上会给你一个元组列表。
    • 再次感谢,会调查的!
    • @ShangWang 如果没有为 userid__userid 找到行怎么办?是否有可能返回空值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多