【发布时间】:2010-04-14 20:44:09
【问题描述】:
这与this question 中提出的问题有些相关,但我正在尝试使用抽象基类来做到这一点。
为了这个例子的目的,让我们使用这些模型:
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 的引用,因为跟踪器,呃,我的意思是,inker 已经完成了线条的绘制,是时候添加颜色了。一旦视图添加了我们想要保存的所有颜色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 没有<strong>dict</strong> 异常)
此时我的大脑被炸了,我是否遗漏了一些明显的东西,还是有更好的方法来做到这一点?
【问题讨论】:
标签: python django inheritance django-models