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整張表绊袋,如果這個外鍵表過大會造成瀏覽器遲遲無法刷新
- 解決方法一:
取消下拉列表 ==> admin里加個字段
raw_id_fields = ('foreignkey', ...)
- 解決方法二:
減小下拉列表的搜索范圍 ==> 重寫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__'
- 解決方法三:
一勞永逸的定制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)
但是具體的呢我還沒看懂……等研究完再更新