【问题标题】:Set editable=False only in subclass仅在子类中设置 editable=False
【发布时间】:2023-03-24 10:57:01
【问题描述】:

我有一个字段“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(“类 'Person' 中的本地字段 'name' 与基类 'Actor' 中类似名称的字段冲突”)。

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    from django.contrib import admin
    
    admin.site.register(Person, exclude=['name'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多