2010-11-24 6 views
0

で偽:=私は自動的にサブクラスの一つに「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モデルでは編集できません。どうすればそれを達成できますか?

DjangoはクラスでFieldError(「ローカルフィールド 『名前』を発生させますので、私は人のモデルに

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

を追加することにより、ベースから類似した名前のフィールドを持つ「人の衝突をフィールド定義を上書きすることはできませんクラス 'Actor' ")。

答えて

0

についてeditableを忘れて、代わりに、モデルのModelAdminのフィールドを除外する:

from django.contrib import admin 

admin.site.register(Person, exclude=['name']) 
関連する問題