仅在子类中设置editable = False

时间:2010-11-24 11:29:22

标签: python django

我有一个字段“name”,它是从其中一个子类中的“first_name”和“last_name”自动构造的:

from django.db import models
from django.utils.translation import ugettext_lazy as _

class Actor(models.Model):
    name = models.CharField(_('name'), max_length=60)

class Company(Actor):
    pass

class Person(Actor):
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    email = models.EmailField(_('e-mail address'), unique=True)

    def save(self, *args, **kwargs):
        if self.first_name or self.last_name:
            self.name = (self.first_name + ' ' + self.last_name).strip()
        else:
            self.name = self.email
        super(Person, self).save(*args, **kwargs)

我希望“名称”字段可以在Actor和Company模型中编辑,但不能在Person模型中编辑。我怎么能做到这一点?

我无法通过添加

来覆盖字段定义
name = models.CharField(_('name'), max_length=60, editable=False)

到Person模型,因为Django引发了一个FieldError(“类''中的”局部字段'名称'与基类'Actor'中具有相似名称的字段冲突“。)

1 个答案:

答案 0 :(得分:0)

忘记editable并在模型的ModelAdmin中排除字段:

from django.contrib import admin

admin.site.register(Person, exclude=['name'])