gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:04:44 24 4
gpt4 key购买 nike

我有两个模型,

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com