Установить editable = False только в подклассе - PullRequest
0 голосов
/ 24 ноября 2010

У меня есть поле "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)

Я бы хотел, чтобы поле "name" было редактируемым вМодели Актера и Компании, но не в модели Персона.Как я могу это сделать?

Я не могу переопределить определение поля, добавив

name = models.CharField(_('name'), max_length=60, editable=False)

к модели Person, потому что Django вызывает FieldError ("Имя локального поля" в классе "Персона "сталкивается с полем схожего имени из базового класса" Актер ").

1 Ответ

0 голосов
/ 24 ноября 2010

Забудьте о editable и вместо этого исключите поле в ModelAdmin модели:

from django.contrib import admin

admin.site.register(Person, exclude=['name'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...