可以使用Django Orm在外键字段上加入两个表吗?
class weapons(models.Model):
weapon = models.CharField(max_length=11)
country = models.IntegerField()
flags = models.IntegerField(default=0)
title = models.CharField(max_length=1000)
class compare(models.Model):
weapon = models.CharField(max_length=11)
user_id = models.IntegerField()
flags = models.IntegerField(default=0)
WeaponNode = models.ForeignKey(weapons, on_delete=models.PROTECT)
当我运行此功能时:
compare.objects.filter(user_id=1).values_list('weapon', 'WeaponNode__title')
我希望此查询raw:
SELECT apps_compare.weapon, apps_weapons.title FROM apps_compare INNER JOIN apps_weapons ON (apps_compare.weapon = apps_weapons.weapon) WHERE apps_compare.user_id = 1
结果应为:
但它返回了此:
SELECT "apps_compare"."weapon", "apps_weapons"."title" FROM "apps_compare" INNER JOIN "apps_weapons" ON ("apps_compare"."WeaponNode_id" = "apps_weapons"."id") WHERE "apps_compare"."user_id" = 1
apps_weapons.title return nulls null:
在我看到的其他示例中,我看到了,我看到了,他们只使用ID与Join On使用,但我想使用武器值而不是ID。我该如何完成ORM?如果ORM不可能,那么其他方法是什么?
class weapons(models.Model):
weapon = models.CharField(max_length=11)
country = models.IntegerField()
flags = models.IntegerField(default=0)
title = models.CharField(max_length=1000)
class compare(models.Model):
weapon = models.CharField(max_length=11)
user_id = models.IntegerField()
flags = models.IntegerField(default=0)
WeaponNode = models.ForeignKey(weapons, on_delete=models.PROTECT)
When I run this function:
compare.objects.filter(user_id=1).values_list('weapon', 'WeaponNode__title')
I expect this query raw:
SELECT apps_compare.weapon, apps_weapons.title FROM apps_compare INNER JOIN apps_weapons ON (apps_compare.weapon = apps_weapons.weapon) WHERE apps_compare.user_id = 1
Result should be:
But it returns this instead:
SELECT "apps_compare"."weapon", "apps_weapons"."title" FROM "apps_compare" INNER JOIN "apps_weapons" ON ("apps_compare"."WeaponNode_id" = "apps_weapons"."id") WHERE "apps_compare"."user_id" = 1
apps_weapons.title returns null:
In other examples I saw, they only used id with JOIN ON but I want to use a weapon value instead of id. How can I do accomplish with ORM? If it's not possible with ORM, then what are the other ways?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您在这里使用
foreferkey
错误的方式。如果武器
在您的中比较
模型是指武器模型,则应该是唯一的,并且然后将其用作
to_field =…
  [django-doc] :然后您可以查询:
You are here using the
ForeignKey
the wrong way. If theweapon
in yourCompare
model refers toweapon
s in theWeapon
model, it should be unique, and then use that as ato_field=…
[Django-doc]:Then you can query with: