将模型转换为其基本模型

菲菲

考虑这个文件:

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

class Restaurant(Place):
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

现在,假设我有一个Restaurant名为restaurant但是这个地方不再是餐厅,因此我想将其转变为一个地方。为此,我这样做:

p = Place.objects.get(pk=place_id)
p.restaurant.delete()
p.save()

它运作良好,p不再是餐厅,但是发生了一些奇怪的事情:pPlace表中的主键(ID)发生了更改,例如是否删除了Place然后重新创建了Place。

为什么会这样呢?以及如何在不更改地点ID的情况下将餐厅转变为地点?

鲸鱼52Hz

restaurantDB2的两个表之间继承place并对其Django进行了一些处理。Django调用了该表Multi-table inheritance这种类型的设计的某些功能包括:

  1. PK 的两个对象相同。
  2. 从Django的角度来看,两个对象似乎是一个对象,因此一个对象的每次更改都会PK导致其他对象的自动更改。
  3. an automatically-created OneToOneField两种模式之间存在联系。
  4. 这些对象中有原子事务供查询。

因此,这是Django ORM的正常行为,而Django管理这两个对象的更改PK您可以通过concrete modelmulti-table inheritance在此链接中阅读有关此概念的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章