从Django中的其他模型填充模型?

2024-10-04 03:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这与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的引用,因为跟踪器,呃,我的意思是,墨水器已经画好了线条,是时候添加颜色了。一旦视图添加了所有的颜色,我们要将ColoredComic保存到数据库中。在

显然我们能做到

^{pr2}$

但真的很好:

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异常)

我的大脑在这一点上被炸了,我是错过了一些明显的东西,还是有更好的方法?在


Tags: selffalsemodelslengthdictmaxclasscharfield
2条回答

在类上使用一个静态方法来处理这个问题呢?在

colored = ColoredComic.create_from_Inked(pk=ink_id)
colored.colored = True
colored.save()

未测试,但与此相关(使用上面的代码)

^{pr2}$

对于这个简单的例子,这将起作用:

inked = InkedComic.object.get(pk=ink_id)
inked.__class__ = ColoredComic
inked.colored = True
inked.save()

相关问题 更多 >