繁体   English   中英

Django model inheritance - 如何设置父属性的值

[英]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 的管理面板时,该属性的值不会显示,因为它是默认建立的并且永远不会更改,但该属性仍然正确设置并且可以从其他任何地方访问。

请参阅抽象 model 类上的 Django 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM