在 Django 过滤器中加入两个模型
Posted
技术标签:
【中文标题】在 Django 过滤器中加入两个模型【英文标题】:Join two models in Django filter 【发布时间】: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_token
和 userid
。
我尝试执行以下操作:
data = File.objects.filter(name__startswith='Dummystring')
这种场景下如何获取access_token?
【问题讨论】:
【参考方案1】:使用values 或values_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__
前缀吗?
那就是这个问题:***.com/questions/10598940/…。如果您只需要一个或两个值,您可以只使用values_list
,对吗?它基本上会给你一个元组列表。
再次感谢,会调查的!
@ShangWang 如果没有为 userid__userid 找到行怎么办?是否有可能返回空值?以上是关于在 Django 过滤器中加入两个模型的主要内容,如果未能解决你的问题,请参考以下文章
在 django admin 中加入两个表以获取 display_list 的列