Django Admin

ForeignKey显示
情景:Model 外键了user,后台想在列表里显示username
list_display = ("username", "xx", ...)
def username(self, obj):
    return obj.user.username
username.short_description = "Show User's username."
ForeignKey所在表字段过多

Django的admin会默认生成一个可选择外键的下拉列表,也就意味着它会SELECT整张表,如果这个外键表过大会造成浏览器迟迟无法刷新

  1. 解决方法一:
    取消下拉列表 ==> admin里加个字段
raw_id_fields = ('foreignkey', ...)
  1. 解决方法二:
    减小下拉列表的搜索范围 ==> 重写form
省市县,三级分开
class xxxForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['province'].queryset = Areas.objects.filter(LevelType=1)
        self.fields['city'].queryset = Areas.objects.filter(LevelType=2)
        self.fields['district'].queryset = Areas.objects.filter(LevelType=3)

    class Meta:
        model = BusinessCircle
        fields = '__all__'
  1. 解决方法三:
    一劳永逸的定制formfield_for_foreignkey方法,新写插件ChainedWidget
该方法原封装在BaseModelAdmin下
def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name in ["province", "city", "district"]:
        return db_field.formfield(widget=ChainedWidget())
    return super().formfield_for_foreignkey(
        db_field, request, **kwargs)

但是具体的呢我还没看懂……等研究完再更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容