這與this question中提出的問題有些相關,但我試圖用抽象基類來做到這一點。從Django中的其他模型填充模型?
對於這個例子的目的,讓使用這些模型:
class Comic(models.Model):
name = models.CharField(max_length=20)
desc = models.CharField(max_length=100)
volume = models.IntegerField()
... <50 other things that make up a Comic>
class Meta:
abstract = True
class InkedComic(Comic):
lines = models.IntegerField()
class ColoredComic(Comic):
colored = models.BooleanField(default=False)
在視圖中可以說我們得到,因爲示蹤劑的InkedComic id
參考,犯錯我的意思是,着墨完成繪製線條和它的時間添加顏色。一旦視圖添加了我們想要將ColoredComic
保存到數據庫的所有顏色。
顯然,我們可以做
inked = InkedComic.object.get(pk=ink_id)
colored = ColoredComic()
colored.name = inked.name
etc, etc.
但實際上它會是不錯的事情:
colored = ColoredComic(inked_comic=inked)
colored.colored = True
colored.save()
我試圖做
class ColoredComic(Comic):
colored = models.BooleanField(default=False)
def __init__(self, inked_comic = False, *args, **kwargs):
super(ColoredComic, self).__init__(*args, **kwargs)
if inked_comic:
self.__dict__.update(inked_comic.__dict__)
self.__dict__.update({'id': None}) # Remove pk field value
但事實證明了ColoredComic.objects.get(pk=1)
通話將pk
粘貼到inked_comic
關鍵字中,這顯然不是意圖。 (並且實際上導致int
沒有dict
例外)
我的大腦在這個時候被炸,我是否錯過了某些明顯的東西,或者是否有更好的方法來做到這一點?
測試這一點,我唯一需要改變 ColoredComic.objects.create()爲ColoredComic(),因爲我只想在該點處理該模型的本地副本(在保存之前需要更多業務邏輯)。 我現在可以回去工作了!謝謝! – 2010-04-14 21:49:44