python - 对于模型使用自定义方法而不是 __unicode__/__str__ ?

标签 python django django-admin

我有两个模型,

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)

    def __unicode__(self):
        return self.first_name

    def get_last_name(self):
        return self.last_name

    def get_full_name(self):
        return (self.first_name + self.surname + self.last_name)

class House(models.Model):
    name = models.CharField(max_length=50)
    persons = models.ManyToManyField(Person)
    house_number = models.CharField(max_length=5)

    def __unicode__(self):
        return self.first_name

模型已在管理网站上注册。

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    pass

@admin.register(House)
class HouseAdmin(admin.ModelAdmin):
    pass

对于模型 Person,我希望管理站点显示方法 get_full_name() 而不是 __unicode__() get_last_name 位于模型 HouseManyToManyField 上。

我怎样才能做到这一点?

谢谢

最佳答案

要让 PersonAdmin 使用 get_full_name,只需在 list_display 中使用 get_full_name

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ['get_full_name']

要自定义人员在多对多字段中的显示方式,override the label_from_instance method .

from django.forms import ModelMultipleChoiceField

class PersonLastNameChoiceField(ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return obj.get_last_name

定义使用自定义字段的模型表单,

class HouseForm(forms.ModelForm):
    persons = models.PersonLastNameChoiceField(Person.objects.all())

然后在模型管理中使用模型表单。

@admin.register(House)
class HouseAdmin(admin.ModelAdmin):
    form = HouseForm

关于python - 对于模型使用自定义方法而不是 __unicode__/__str__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554372/

相关文章:

python - Python 中是否有用于纯文本文件的 native 模板系统?

python - 在 Databricks 集群上 pip-install 来自 Azure Artefact 的 Python 包

python - 通过排除索引号选择 Pandas 行

python - 如何覆盖 Django Admin AutoComplete 小部件包装器

python - Django Admin,使用自定义函数排序

python - 运行 celeryd 时出错

django - 删除用作外键的对象

django - 保存 FileField 文件上传到 MEDIA_ROOT 以外的地方?

javascript - 在 django 模板中渲染之前去除 javascript 代码

django - 缺少Django Admin Widget搜索权限和组