2016-09-14 75 views
0

用戶模型中有150k條目。當我在沒有raw_id_fields的django-admin中使用它時,它將所有條目加載爲外鍵的選擇菜單時導致問題。是否有替代方式,以便它可以輕鬆加載或可以搜索?刪除django的外鍵字段中的默認選擇admin

我有以上定義的這些模型,並且有一個用戶模型在ProfileRecommendation模型中用作ForeignKey。用戶模型的數據庫條目包含大約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='') 
+0

[django admin中的ForeignKey字段可能重複](https://stackoverflow.com/questions/39441421/foreignkey-field-in-django-admin) –

回答

1

您可以使用方法formfield_for_foreignkey

是這樣的:

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) 

或其他方法是重寫該表格爲那個modeladmin類

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 

你可以改變小部件,並使用像自動完成和ajax selectize的東西。