【问题标题】:How do I filter by a ForeignKey's db_column field without going through the foreign object in Django如何在不通过 Django 中的外来对象的情况下按 ForeignKey 的 db_column 字段进行过滤
【发布时间】:2011-02-25 04:41:03
【问题描述】:

我有一个带有非 django 命名约定的旧数据库。如果我有以下(缩减)模型:

class Registration(models.Model):
    projectId=models.IntegerField(primary_key=True)

class Application(models.Model):
    applicationId=models.IntegerField(primary_key=True)
    registration=models.ForeignKey(Registration,db_column='projectId')

ForeignKey 实例导致在 Application 上创建一个名为 registration_id 的属性,但这既不是该字段的正确名称(我有一个 hack 来解决这个问题),也无法使用在QuerySet

有什么方法可以在 Application 模型上使用 ForeignKey 提供的 id 字段,而不必通过注册来引用它?


IE。我写了很多代码,例如:

Application.objects.get(projectId=1234)


并且不想写成:

Application.objects.get(registration__projectId=1234)

甚至

Application.objects.get(registration__pk=1234)


我有点惊讶:

Application.objects.get(registration_id=1234)

没用……


另请注意,我尝试将 id 列定义为字段以及适用于查询集的外键,但插入抱怨试图两次插入同一列:

class Application(models.Model):
    ...
    projectId=models.IntegerField()
    ...

【问题讨论】:

    标签: python django-models django-queryset


    【解决方案1】:

    你试过了吗?

    Application.objects.get(registration=1234)
    

    【讨论】:

    • 感谢 Wogan,不是我想做的 (Application.objects.get(projectId=1234)),但可能是我能做到的,但我没有意识到我能做到。跨度>
    【解决方案2】:

    我认为只是做Application.objects.registration.get(projectId=1234) 应该做你想做的事。

    【讨论】:

    • 谢谢 Mahmoud,我没有意识到我会这样做。但是,我将另一个标记为答案,因为我认为这将返回一个相对于注册的 QuerySet。例如: Application.objects.registration.filter(projectId__in=[1,2,3]).order_by('applicationId') 不起作用?不过了解一下还是很有用的!
    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2021-12-20
    • 2012-07-23
    • 2010-09-20
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多