Django 模型继承 - 如何为父属性设置值
Django model inheritance - How to set value for parent attribute
有两个模型,父模型和子模型,我想设置子模型继承的属性之一的值。
例如,在下面的代码中,将在创建 RedCat
对象时设置颜色属性。
# Parent class
class Cat(models.Model):
name = models.CharField(max_length=10)
color = models.CharField(max_length=10)
class Meta:
abstract = True
# Child class
class RedCat(Cat):
color = 'red' # <-- Doesn't work!
我正在考虑覆盖父属性或只在子属性上使用该属性,但我想知道,是否有 right/better 方法可以在 Django 模型中为继承属性设置默认值?
首先,在django中作为parent的child的描述,我认为不是通过subclassing parent class.
相反,如果 RedCat
是 Cat
的 child,您应该创建一个新模型,该模型的 ForeignKey
字段旨在 [=12] =]模块。
我认为你的意思是为字段设置 default
值,这可以通过在字段上使用 default
属性来完成。
Models.py
class Cat(models.Model):
...
class RedCat(models.Model):
cat = models.ForeignKey(Cat, on_delete=models.CASCADE)
color = models.CharField(
max_length=10,
default='red',
)
您可以 link 使用 ForeignKey
然后覆盖子项中的父字段值。
models.py
# Parent class
class Cat(models.Model):
name = models.CharField(max_length=10)
color = models.CharField(max_length=10)
# Child class
class RedCat(Cat):
color_type = models.ForeignKey(Cat, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
self.color_type.color = "Red"
self.color_type.save()
super(RedCat, self).save(*args, **kwargs)
当我第一次提出这个问题时,我很困惑,因为我看不到 /admin
界面中 subclass 中设置的属性值,但代码确实有效。
parent class 是包含属性定义的抽象 class。
child class 正确地继承了这个属性并设置了它的值。
浏览此模型的管理面板时,不会显示该属性的值,因为它是默认设置的并且永远不会更改,但此属性仍然设置正确并且可以从其他任何地方访问。
有两个模型,父模型和子模型,我想设置子模型继承的属性之一的值。
例如,在下面的代码中,将在创建 RedCat
对象时设置颜色属性。
# Parent class
class Cat(models.Model):
name = models.CharField(max_length=10)
color = models.CharField(max_length=10)
class Meta:
abstract = True
# Child class
class RedCat(Cat):
color = 'red' # <-- Doesn't work!
我正在考虑覆盖父属性或只在子属性上使用该属性,但我想知道,是否有 right/better 方法可以在 Django 模型中为继承属性设置默认值?
首先,在django中作为parent的child的描述,我认为不是通过subclassing parent class.
相反,如果 RedCat
是 Cat
的 child,您应该创建一个新模型,该模型的 ForeignKey
字段旨在 [=12] =]模块。
我认为你的意思是为字段设置 default
值,这可以通过在字段上使用 default
属性来完成。
Models.py
class Cat(models.Model):
...
class RedCat(models.Model):
cat = models.ForeignKey(Cat, on_delete=models.CASCADE)
color = models.CharField(
max_length=10,
default='red',
)
您可以 link 使用 ForeignKey
然后覆盖子项中的父字段值。
models.py
# Parent class
class Cat(models.Model):
name = models.CharField(max_length=10)
color = models.CharField(max_length=10)
# Child class
class RedCat(Cat):
color_type = models.ForeignKey(Cat, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
self.color_type.color = "Red"
self.color_type.save()
super(RedCat, self).save(*args, **kwargs)
当我第一次提出这个问题时,我很困惑,因为我看不到 /admin
界面中 subclass 中设置的属性值,但代码确实有效。
parent class 是包含属性定义的抽象 class。
child class 正确地继承了这个属性并设置了它的值。
浏览此模型的管理面板时,不会显示该属性的值,因为它是默认设置的并且永远不会更改,但此属性仍然设置正确并且可以从其他任何地方访问。