Django 嵌套表单 - 始终显示对象而不是模型详细信息
Django Nested Form - Always Showing Object instead of model details
我正在处理通过夹层生成的 Django 项目。我已经能够创建我的模型,但是我想要一个表单,管理员可以在其中 select 从列表中分配多对多或一对多关系中的值。例如,我有一个模式模型:
class Schema(AutoCreatedUpdatedMixin, SoftDeleteMixin):
"""List of all Schemas in a given database"""
name = models.CharField(max_length=128, null=False)
status = models.BooleanField(max_length=128, null=False, default=True, verbose_name="Is Active")
description = models.CharField(max_length=65535, null=True, blank=True, default=None)
database = models.ForeignKey(Database, on_delete=models.CASCADE)
pull_requests = models.ManyToManyField(Link)
questions = models.ManyToManyField(Question, blank=True)
comments = models.ManyToManyField(Comment, blank=True)
technical_owners = models.ManyToManyField(Employee, related_name='technical_owners_schemas', blank=True)
business_owners = models.ManyToManyField(Employee, related_name='business_owners_schemas', blank=True)
watchers = models.ManyToManyField(Employee, related_name='watchers_schemas', blank=True)
def __unicode__(self):
return "{}".format(self.name)
我有一个员工模型
class Employee(AutoCreatedUpdatedMixin, SoftDeleteMixin):
"""List of people with any involvement in tables or fields: business or technical owners, developers, etc"""
name = models.CharField(max_length=256, blank=False, null=False, default=None, unique=True)
email = models.EmailField(blank=True, null=True, unique=True)
def __unicode__(self):
return "{}".format(self.employee)
一个员工可以拥有多个架构,一个架构可以由多个员工拥有。我的数据库中有一名活跃的员工,但是当我尝试创建 Schema
时,该员工显示为 Employee Object
。相反,我希望表格显示 Employee.name
。我怎样才能做到这一点?我的管理文件包含以下内容:
class SchemasAdmin(admin.ModelAdmin):
list_display = ['name', 'status', 'database', 'description']
ordering = ['status', 'database', 'name']
actions = []
exclude = ('created_at', 'updated_at', 'deleted_at')
首先你用的是python2还是3?对于 3,应该使用 __str__
方法而不是 __unicode__
。我写这篇文章是因为 Employee 的 __unicode__
方法似乎有问题,尽管它被定义为:
def __unicode__(self):
return "{}".format(self.employee)
th Employee class 没有 employee
属性(除非 class 从 (AutoCreatedUpdatedMixin, SoftDeleteMixin
) 继承的 mixin 中有这样的属性,但我没有不这么认为。
无论如何,问题是您没有定义 属性 __str__
(如果使用 python 3)或 __unicode__
(对于 python 2) Employee
class 上的方法 - 只需将其定义为:
return self.name
您应该会在 django 管理 select 字段中看到员工的姓名。
我正在处理通过夹层生成的 Django 项目。我已经能够创建我的模型,但是我想要一个表单,管理员可以在其中 select 从列表中分配多对多或一对多关系中的值。例如,我有一个模式模型:
class Schema(AutoCreatedUpdatedMixin, SoftDeleteMixin):
"""List of all Schemas in a given database"""
name = models.CharField(max_length=128, null=False)
status = models.BooleanField(max_length=128, null=False, default=True, verbose_name="Is Active")
description = models.CharField(max_length=65535, null=True, blank=True, default=None)
database = models.ForeignKey(Database, on_delete=models.CASCADE)
pull_requests = models.ManyToManyField(Link)
questions = models.ManyToManyField(Question, blank=True)
comments = models.ManyToManyField(Comment, blank=True)
technical_owners = models.ManyToManyField(Employee, related_name='technical_owners_schemas', blank=True)
business_owners = models.ManyToManyField(Employee, related_name='business_owners_schemas', blank=True)
watchers = models.ManyToManyField(Employee, related_name='watchers_schemas', blank=True)
def __unicode__(self):
return "{}".format(self.name)
我有一个员工模型
class Employee(AutoCreatedUpdatedMixin, SoftDeleteMixin):
"""List of people with any involvement in tables or fields: business or technical owners, developers, etc"""
name = models.CharField(max_length=256, blank=False, null=False, default=None, unique=True)
email = models.EmailField(blank=True, null=True, unique=True)
def __unicode__(self):
return "{}".format(self.employee)
一个员工可以拥有多个架构,一个架构可以由多个员工拥有。我的数据库中有一名活跃的员工,但是当我尝试创建 Schema
时,该员工显示为 Employee Object
。相反,我希望表格显示 Employee.name
。我怎样才能做到这一点?我的管理文件包含以下内容:
class SchemasAdmin(admin.ModelAdmin):
list_display = ['name', 'status', 'database', 'description']
ordering = ['status', 'database', 'name']
actions = []
exclude = ('created_at', 'updated_at', 'deleted_at')
首先你用的是python2还是3?对于 3,应该使用 __str__
方法而不是 __unicode__
。我写这篇文章是因为 Employee 的 __unicode__
方法似乎有问题,尽管它被定义为:
def __unicode__(self):
return "{}".format(self.employee)
th Employee class 没有 employee
属性(除非 class 从 (AutoCreatedUpdatedMixin, SoftDeleteMixin
) 继承的 mixin 中有这样的属性,但我没有不这么认为。
无论如何,问题是您没有定义 属性 __str__
(如果使用 python 3)或 __unicode__
(对于 python 2) Employee
class 上的方法 - 只需将其定义为:
return self.name
您应该会在 django 管理 select 字段中看到员工的姓名。