And*_*sov 5 python django customization django-admin
我有一个模型,其中一个字段是ForeignKey,所以我在django admin中看到select,是否可以自定义此选择的标签?
class Model(models.Model):
name = models.CharField()
def __unicode__(self):
return self.name
class Part(models.Model):
name = models.CharField()
parent = model.ForeignKey(Model)
def __unicode__(self):
return self.name
def name_with_model(self):
return self.name + ' ' + parent.name
class SmallPart(models.Model):
name = models.CharField()
parent = model.ForeignKey(Part)
Run Code Online (Sandbox Code Playgroud)
当我添加新的SmallPart时,我看到带有部件名称的select标签,我需要看到name_with_model
如果你的意思是字段标签:
使用以下代码: Django Admin - 覆盖自定义表单字段的小部件
# forms.py
from django import forms
from django.contrib import admin
class ProductAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProductAdminForm, self).__init__(*args, **kwargs)
self.fields['tags'].label = 'Custom Label'
Run Code Online (Sandbox Code Playgroud)
然后,在ModelAdmin对象中,指定表单:
from django.contrib import admin
from models import Product
from forms import ProductAdminForm
class ProductAdmin(admin.ModelAdmin):
form = ProductAdminForm
admin.site.register(Product, ProductAdmin)
Run Code Online (Sandbox Code Playgroud)
如果您的意思是选择下拉列表中的标签:
像上面的答案中一样覆盖小部件.
编辑:
fk字段的默认表单字段是模型选择字段.来自docs
将调用模型的unicode方法来生成对象的字符串表示,以便在字段的选择中使用; 提供自定义表示,子类ModelChoiceField和覆盖label_from_instance.此方法将接收模型对象,并应返回适合表示它的字符串.例如:
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return obj.name_with_model()
Run Code Online (Sandbox Code Playgroud)
然后:
class SmallPartAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SmallPartAdminForm, self).__init__(*args, **kwargs)
self.fields['parent'] = MyModelChoiceField(queryset=Part.objects.all())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9131 次 |
| 最近记录: |