管理界面中的外键和选择字段值

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

相关问题

  1. Django admin - 更改ForeignKey显示文本
  2. Django表单:如何动态创建ModelChoiceField标签
  3. 更改Django ModelChoiceField以显示用户的全名而不是用户名
  4. Django显示get_full_name()而不是模型形式的用户名
  5. django:自定义ModelMultipleChoiceField的显示
  6. django如何在FilteredSelectMultiple中显示用户全名
  7. Django ModelChoiceField下拉框自定义填充
  8. 自定义在django admin中选择
  9. 在ModelChoiceField Django中使用除unicode之外的方法


归档时间:

查看次数:

11042 次

最近记录:

12 年,4 月 前