如何在Django中不通过外键对象按db_column字段过滤?
我有一个老旧的数据库,它的命名方式跟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
的属性,但这个名字并不是字段的正确名称(我有个小技巧来解决这个问题),而且在QuerySet
中也无法使用。
有没有什么办法可以直接在Application模型上使用ForeignKey提供的id字段,而不是通过Registration来引用它呢?
也就是说,我写了很多这样的代码:
Application.objects.get(projectId=1234)
但我不想每次都写成这样:
Application.objects.get(registration__projectId=1234)
甚至是这样:
Application.objects.get(registration__pk=1234)
我有点惊讶的是:
Application.objects.get(registration_id=1234)
这个居然不管用……
另外,我还尝试过把id列定义为一个字段,同时也定义了foreignkey,这样在queryset中是有效的,但在插入数据时却报错,说是试图往同一个列插入两次:
class Application(models.Model):
...
projectId=models.IntegerField()
...
2 个回答
0
我觉得直接用 Application.objects.registration.get(projectId=1234)
这个代码就能实现你想要的功能。
0
你试过这个吗?
Application.objects.get(registration=1234)