Django 模型外键返回 ID

Ada*_*han 3 python django model-view-controller

我一直在尝试搜索论坛以获得答案,但搜索似乎有点棘手。

我有以下模型从 django User 表中提取用户:

class trendingidea(models.Model):
        iname = models.CharField(unique=True, max_length=15)
        idea = models.TextField(unique=True)
        submittedon = models.DateTimeField()
        support = models.PositiveSmallIntegerField()
        readbyadmin = models.BooleanField()
        feasibilitycheck = models.BooleanField()
        submittedby = models.ForeignKey(User,related_name="submitted_by")
        assignedto = models.ForeignKey(User, blank=True, null=True, related_name="assignedto")
Run Code Online (Sandbox Code Playgroud)

但是,当我查询数据库并提取信息时:

ti=list(trendingidea.objects.values())

print(ti)

[{'readbyadmin': False, 'id': 1, 'idea': 'cisco', 'feasibilitycheck': True, 'submittedby_id': 1, 'support': 1, 'submittedon': datetime.datetime(2017, 11, 6, 11, 8, 10, tzinfo=<UTC>), 'iname': 'cisoc', 'assignedto_id': 1}]
Run Code Online (Sandbox Code Playgroud)

代替它submittedbyassignedto它给了我submittedby_id:1 和assignedto_id:1。

我想要用户名而不是他们的 ID。有没有办法实现这一目标?

Bur*_*lid 6

您可以通过使用__前缀引用相关字段。唯一的缺点是您还必须列出所有其他字段:

trendingidea.objects.values('readbyadmin',
                            'id',
                            'idea',
                            'submittedon',
                            'support',
                            'readbyadmin',
                            'feasibilitycheck',
                            'submittedby__name',
                            'assignedto__name')
Run Code Online (Sandbox Code Playgroud)

请注意,您的字典将具有submittedby__nameassignedto__name键。