2010-11-24 17 views
0

Ich habe ein Feld „Name“, die automatisch aus „first_name“ aufgebaut ist, und „last_name“ in einer der Unterklassen:Set editierbare = False nur in der Unterklasse

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) 

Ich möchte das Feld „Name“ in den Actor- und Company-Modellen editierbar sein, nicht jedoch im Person-Modell. Wie kann ich das erreichen?

Ich kann die Felddefinition außer Kraft setzen von

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

zum Person-Modell hinzugefügt, weil Django eine FieldError ("Local Feld‚Name‘in der Klasse‚Person‘Auseinandersetzungen mit Feld ähnlichen Namen von der Basis erhöht Klasse 'Schauspieler' ").

Antwort

0

über editable Vergessen und das Feld in dem Modeladmin Modell ausschließen statt:

from django.contrib import admin 

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