rus*_*ush 6 django django-admin
我正在尝试构建应用程序,其中每个项目应与某些用户相关.把它们放在一起很容易
user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
不幸的是,在django admin的情况下,我得到选择字段,其中所有用户都按其用户名列出.另外我需要他们的first_name和last_name.我只是想不通,如果有任何方法在django管理界面的选择列表中显示所有名称.
pan*_*843 15
您需要为此创建自定义Form并在您的ModelAdmin.中设置表单属性.
在那里,Form您需要将user模型上的表单字段类型覆盖为自定义ModelChoiceField.
ModelChoiceField有一个名为的方法label_from_instance,你需要覆盖它来获取全名.
######################################
## models.py ##
######################################
from django.db import models
from django.contrib.auth.models import User
class Item(models.Model):
user = models.ForeignKey(User)
name = models.CharField("name", max_length=60)
def __unicode__(self):
return self.name
######################################
## forms.py ##
######################################
from django import forms
from django.contrib.auth.models import User
from .models import Item
class CustomUserChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return obj.get_full_name()
class ItemForm(forms.ModelForm):
user = CustomUserChoiceField(queryset=User.objects.all())
class Meta:
model = Item
######################################
## admin.py ##
######################################
from django.contrib import admin
from .models import Item
from .forms import ItemForm
class ItemAdmin(admin.ModelAdmin):
form = ItemForm
admin.site.register(Item, ItemAdmin)
Run Code Online (Sandbox Code Playgroud)
https://github.com/django/django/blob/1.4.5/django/forms/models.py#L948
| 归档时间: |
|
| 查看次数: |
11042 次 |
| 最近记录: |