公共字段我有一些機型:Django的:存放於父模型
class Place(models.Model):
name = models.CharField(unique=True)
class Bar(Place):
drinks = models.ManyToManyField('Drink')
class Restaurant(Place):
meals = models.ManyToManyField('Meals')
這是繼承結構的多表,其中每一條也只供應飲料,每個餐廳只供應餐點。不過,我需要每個地方的名稱在所有地方都是唯一的 - 因此,父母的模型是Place
。
現在,多表繼承假設父母和孩子是分開的實體。這意味着,當我想創建一個新的Bar
,我應該是這樣的:
>> parent = Place(name='Myplace')
>> parent.save()
>> child = Bar(place=parent, drinks=mydrinklist)
>> child.save()
但在我的情況下,Place
不是一個獨立的實體:它不應該通過自身的存在。這只是一個有一些限制的共享存儲。我想有這樣的事情:
>> child = Bar(name='Myplace', drinks=mydrinklist)
>> child.save()
凡name
屬性被自動傳遞到底層父模型,當save()
被稱爲默默地創建了一個Place
模型。 SQLAlchemy可以通過多表繼承來實現這一點。有沒有辦法在Django中實現相同的功能?
您是否嘗試覆蓋'Place.save'方法並實現您在那裏描述的邏輯? – lanzz
你嘗試了你的建議語法嗎?這正是多表繼承在Django中的工作原理,並且您希望的語法可以與您顯示的模型正確匹配。 (事實上,你的第一個版本*不會工作,因爲'parent'不是欄上的字段。) –
哇,這實際上是有效的。我在django-rest-framework中的'name'字段遇到了一些錯誤,並認爲這與錯誤的'save'調用相關聯;看起來我錯了。非常感謝。 – rocknrollnerd