gpt4 book ai didi

python - 从管理员检测哪个模型创建并分配外键

转载 作者:行者123 更新时间:2023-12-01 08:51:29 27 4
gpt4 key购买 nike

主要有3种模型:动物机器人。每个 Photo 模型上都有一个外键。在 Photo 模型中,我重写了 save(self, *args, **kwargs) 方法。

class Photo(models.Model):
file = models.ImageField()
is_alive = models.BooleanField(default=True, editable=False)

def save(self, *args, **kwargs):
if #main_model# == 'Robot':
self.is_alive = False
super().save(*args, **kwargs)

class Animal(models.Model):
name = models.CharField(max_length=50)
photo = models.OneToOneField(Photo, on_delete=models.CASCADE)

class Robot(models.Model):
name = models.CharField(max_length=50)
photo = models.OneToOneField(Photo, on_delete=models.CASCADE)

class Human(models.Model):
name = models.CharField(max_length=50)
photo = models.OneToOneField(Photo, on_delete=models.CASCADE)

当我从管理员填充任何主要模型时,我正在创建一张照片,该照片将在创建后立即分配给模型(我正在填充)作为外键。我如何从 save(self, *args, **kwargs) 方法知道现在正在创建哪个主要模型?

screenshot-1

screenshot-2

def save(self, *args, **kwargs):
if #main_model# == 'Robot':
self.is_alive = False
super().save(*args, **kwargs)

或者,也许还有其他方法可以做到这一点?预先感谢您,任何帮助将不胜感激。

最佳答案

由于在保存 OneToOne 的“其他伙伴”之前您无法知道照片是否属于机器人,因此应在您保存之后设置 is_alive = False已保存 Robot 实例。换句话说:

class Robot(BeepBoop):
def save(self,*args,**kwargs):
super().save(*args,**kwarg)
self.photo.is_alive = False
self.photo.save()

在更改照片的“所有者”时,这仍然会带来问题。假设机器人的照片与人类的照片交换。男人的照片将有 is_alive = False (因为它之前属于机器人)。这样做可能会更好:

class Being(models.Model):
name = models.CharField(max_length=50)
photo = models.OneToOneField(Photo, on_delete=models.CASCADE)

def save(self, is_alive = True, *args, **kwargs):
super().save(*args, **kwargs)
self.photo.is_alive = is_alive
self.photo.save()

class Animal(Being):
pass

class Man(Being):
pass

class Robot(Being):
def save(self, *args, **kwargs):
super().save(is_alive = False, *args, **kwargs)

关于python - 从管理员检测哪个模型创建并分配外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086839/

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