我有两个模型,
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
位于模型 House
的 ManyToManyField
上。
我怎样才能做到这一点?
谢谢
最佳答案
要让 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/