[英]Django model inheritance - How to set value for parent attribute
有两个模型,父和子,我想设置子继承的属性之一的值。
例如,在以下代码中,将在创建RedCat
object 时设置颜色属性。
# 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!
我正在考虑覆盖父属性或仅在子属性上具有该属性,但我想知道,是否有正确/更好的方法在 Django model 中为继承属性设置默认值?
您可以使用ForeignKey
链接,然后覆盖子项中的父字段值。
模型.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)
首先,在 django 中作为父母的孩子的描述,我认为不是通过继承父母 class。
相反,考虑到RedCat
是否是Cat
的孩子,您应该创建一个新的 model ,其中包含一个针对Cat
模块的ForeignKey
字段。
我认为您的意思是为字段设置default
值,这可以通过在字段上使用default
属性来完成。
模型.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',
)
当我第一次提出这个问题时,我很困惑,因为我看不到/admin
接口的子类中设置的属性值,但代码确实有效。
父 class 是包含属性定义的抽象 class。
子 class 正确继承此属性并设置其值。
导航此 model 的管理面板时,该属性的值不会显示,因为它是默认建立的并且永远不会更改,但该属性仍然正确设置并且可以从其他任何地方访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.