gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:54:10 25 4
gpt4 key购买 nike

这与 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)

在 View 中,假设我们获得了对 InkedComic id 的引用因为示踪剂,呃,我的意思是,墨水器已经完成绘制线条,是时候添加颜色了。一旦 View 添加了我们想要保存的所有颜色 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> 异常)

此时我的大脑已经炸裂了,我是不是漏掉了一些明显的东西,还是有更好的方法来做到这一点?

最佳答案

类上的静态方法来处理这个怎么样?

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

未经测试,但具有这种效果(使用上面的代码)

class ColoredComic(Comic):
colored = models.BooleanField(default=False)

@staticmethod
def create_from_Inked(**kwargs):
inked = InkedComic.objects.get(**kwargs)
if inked:
colored = ColoredComic.objects.create()
colored.__dict__.update(inked.__dict__)
colored.__dict__.update({'id': None}) # Remove pk field value
return colored
else:
# or throw an exception...
return None

关于python - 从 Django 中的其他模型填充模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com