删除django admin的ForeignKey Field中的默认选择 [英] remove the default select in ForeignKey Field of django admin

查看:203
本文介绍了删除django admin的ForeignKey Field中的默认选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用户模型中有150k个条目。当我在django-admin中使用它而不使用raw_id_fields时,将加载所有条目作为外键选择菜单时会导致问题。是否有替代方式,以便它可以轻松加载或可以成为可搜索?



我有这些定义如上所述的模型,并有一个用户模型用作ForeignKey在ProfileRecommendation模型。用户模型的数据库条目包含大约150k个条目。我不想要这些外部字段的默认选择选项。相反,如果可以过滤掉它们,并且只加载用户表的几个条目。如何让他们可以像自动完成建议一样搜索?



admin.py

  class ProfileRecommendationAdmin(admin.ModelAdmin):
list_display =('user','recommended_by','recommended_text')
raw_id_fields =(user,recommended_by)
search_fields = ['user__username','recommended_by__username',]
admin.site.register(ProfileRecommendation,ProfileRecommendationAdmin)

models.py

  class ProfileRecommendation(models.Model):
user = models.ForeignKey(User, related_name ='recommendations')
recommended_by = models.ForeignKey(User,related_name ='recommended')
recommended_on = models.DateTimeField(auto_now_add = True,null = True)
recommended_text = models。 TextField(default ='')


解决方案

formfield_for_foreignkey



像这样:

  class ProfileRecommendationAdmin(admin.ModelAdmin):


def formfield_for_foreignkey(self,db_field,request,* * kwargs)
如果db_field.name ==user:
kwargs [queryset] = User.objects.filter(is_superuser = True)
return super(ProfileRecommendationAdmin,self) .formfield_for_foreignkey(db_field,request,** kwargs)

或者其他方法是覆盖该表单来自django.contrib的$ ad $ import $ $ $ $ $


$ $ $ $ $ $

class PersonForm(forms.ModelForm):

class Meta:
model = Person
exclude = ['name']

类PersonAdmin(admin.ModelAdmin):
exclude = ['age']
form = PersonForm

您可以更改小部件,并使用类似于具有自动完成和ajax的selectize。


There are 150k entries in User model. When i am using it in django-admin without the raw_id_fields it is causing problem while loading all the entries as a select menu of foreign key. is there alternate way so that it could be loaded easily or could become searchable?

I have these models as of defined above and there is a User model which is used as ForeignKey in ProfileRecommendation models. The database entry for user model consist of around 150k entries. I don't want default select option for these foreign fields. Instead if can filter them out and load only few entries of the user table. How I can make them searchable like autocomplete suggestion?

admin.py

class ProfileRecommendationAdmin(admin.ModelAdmin):
list_display = ('user', 'recommended_by', 'recommended_text')
raw_id_fields = ("user", 'recommended_by')
search_fields = ['user__username', 'recommended_by__username',]
admin.site.register(ProfileRecommendation, ProfileRecommendationAdmin)

models.py

class ProfileRecommendation(models.Model):
user = models.ForeignKey(User, related_name='recommendations')
recommended_by = models.ForeignKey(User, related_name='recommended')
recommended_on = models.DateTimeField(auto_now_add=True, null=True)
recommended_text = models.TextField(default='')

解决方案

you can use method formfield_for_foreignkey

something like this:

class ProfileRecommendationAdmin(admin.ModelAdmin):


   def formfield_for_foreignkey(self, db_field, request, **kwargs):
     if db_field.name == "user":
       kwargs["queryset"] = User.objects.filter(is_superuser=True)
     return super(ProfileRecommendationAdmin,self).formfield_for_foreignkey(db_field, request, **kwargs)

or other way is to override the form for that modeladmin class

from django import forms
from django.contrib import admin
from myapp.models import Person

class PersonForm(forms.ModelForm):

    class Meta:
        model = Person
        exclude = ['name']

class PersonAdmin(admin.ModelAdmin):
    exclude = ['age']
    form = PersonForm

you can change the widget and use something like the selectize with autocomplete and ajax.

这篇关于删除django admin的ForeignKey Field中的默认选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆