具有外键和双下划线的Django模型操作

时间:2019-07-26 13:42:06

标签: django django-models django-queryset

我是Django的新手,只是想知道更多。 假设我有两个定义如下的模型:

class ModelA(models.Model):
    Item1 = models.Charfield()
    description = models.Charfield()

class ModelB(models.Model):
    ItemTypes = models.CharField(ModelA, on_delete=models.CASCADE)

当尝试引用或使用模型时,您可以像这样使用它们(仍然假设):

something = ModelB.objects.filter(ItemType__Item)

我的问题是在双下划线__上。

我只是想知道:

  1. 后端的代码是什么样子。

  2. 是否存在带有三下划线或单个下划线的有效语法?

1 个答案:

答案 0 :(得分:0)

我将代码重写为有效的Django模型:

class ModelA(models.Model):
    item1 = models.CharField()
    description = models.CharField()

class ModelB(models.Model):
    item_types = models.ForeignKey(ModelA, on_delete=models.CASCADE)
things = ModelB.objects.filter(item_type__item1="the-item-name")

Q1。后端的代码是什么样的。

A1。产生的SQL查询为:

SELECT b.*
FROM ModelB b, ModelB a
WHERE b.item_types_id = a.id
AND a.item1 = 'the-item-name'

item_types ForeignKey列在数据库中创建为item_types_id。如果未指定主键,则所有Django数据库表均包含名为id的列。

Q2。是否有有效的语法带有三下划线或单个下划线?

A2。没有三下划线。单个下划线在列名中有效。