代码之家  ›  专栏  ›  技术社区  ›  John Giotta iaforek

模型继承和属性默认值

  •  4
  • John Giotta iaforek  · 技术社区  · 16 年前

    我有一个具有Category属性和几个子类的主类。我想为每个子类设置默认类别。例如:

    class BaseAd(models.Model):
        CATEGORY_CHOICES = ((1, 'Zeta'), (2, 'Sigma'), (3, 'Omega'),)
        category = models.IntegerField(choices=CATEGORY_CHOICES)
        ...
    
    class SigmaAd(BaseAd):
        additional_prop = models.URLField()
        category = models.IntegerField(default=2, editable=False)
    

    当然,由于字段错误,我的示例不起作用。如何“重写”属性值?或者它是我应该关注的管理功能?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Ignacio Vazquez-Abrams    16 年前

    您必须在 __init__() 子方法。检查传递的关键字参数是否 category 已给定值,如果未将其设置为 2 在传递给父级之前。

        2
  •  0
  •   John Giotta iaforek    16 年前

    我想出来了:

    class SigmaAdMan(admin.ModelAdmin):
    exclude = ('category',)
    
    def save_model(self, request, obj, form, change):
        obj.category = 2
        obj.save()
    

    不确定它是否是最好的方法,但它的功能

    推荐文章