2012-12-25 76 views
2

我有兩個Django模型like these如何從現有的基礎模型實例創建繼承的django模型實例?

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

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

我以前曾創造了一個Place實例,就像這樣:

sixth_ave_street_vendor = Place(name='Bobby Hotdogs', address='6th Ave') 
sixth_ave_street_vendor.save() 

現在鮑比已經升級了擺地攤的餐廳。我怎樣才能在我的代碼中做到這一點? 爲什麼這個代碼不工作:

sixth_ave_restaurant = Restaurant(place=sixth_ave_street_vendor, 
            serves_hot_dogs=True, 
            serves_pizza=True) 
sixth_ave_restaurant.save() 

回答

3

這裏是我的解決方法:

sixth_ave_restaurant = Restaurant(place_ptr=sixth_ave_street_vendor, 
            serves_hot_dogs=True, 
            serves_pizza=True) 
sixth_ave_restaurant.save_base(raw=True) 

如果你想做些別的事情與sixth_ave_restaurant,你應該再得到它,因爲它的id尚未分配,因爲它得到後正常分配save()

sixth_ave_restaurant = Restaurant.objects.get(id=sixth_ave_street_vendor.id) 
3

您應該使用place_ptr而不是place

restaurant = Restaurant.objects.create(place_ptr=sixth_ave_street_vendor, 
             serves_hot_dogs=True, serves_pizza=True) 
+0

我同時設置'place_ptr'和'place_ptr_id',但仍Django的嘗試插入一個新的地方:( –

+0

@RezaMohammadi塔t可能是因爲'sixth_ave_street_vendor'還沒有被保存,並且在你的代碼中沒有調用save方法'sixth_ave_street_vendor.save()' –

+0

這裏有另一種方法:創建一個名爲'BasePlace'的模型,並擴展該型號的其他型號。 –

相關問題