过滤Django admin下拉列表中的字段

2024-09-27 07:18:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的django模型:

class Car(models.Model):
   carname = models.CharField(max_length=100)
   carmodel = models.CharField(max_length=100)
   carcountry = models.CharField(max_length=100)
   caryear = models.CharField(max_length=100)
       cardesc = models.TextField()

还有一个管理员py显示所有记录:

^{pr2}$

它工作得很好。现在,我的问题是: 我想有一个下拉列表,我可以选择汽车模型,然后根据我的选择过滤我的结果。。。在

我怎么能做到呢?我必须编辑管理员py文件?Django有内置的特性吗?或者我必须创建一个HTML模板?怎样?请帮帮我。在


Tags: djangopy模型modelmodels管理员carlength
3条回答

你得加上

list_filter = ['carmodel', ]

类ModelAdmin。在

documentation

ModelAdmin.formfield_for_foreignkey(db_field, request, **kwargs)¶

The formfield_for_foreignkey method on a ModelAdmin allows you to override the default formfield for a foreign keys field. For example, to return a subset of objects for this foreign key field based on the user:

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "car":
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

This uses the HttpRequest instance to filter the Car foreign key field to only display the cars owned by the User instance.

试试这个。在

class CustomForm(forms.ModelForm):

    class Meta:
        model = Cars

    cars_list = Cars.objects.values_list('carmodel', flat=True).order_by('carmodel').distinct()
    choice_list = []
    for car in cars_list:
        choice_list.append((car,car,)) 
    CAR_CHOICES = choice_list

    #Used 'ChoiceField' as you want dropdown list for carmodels stored in text fields 
    carmodel = forms.ChoiceField(widget=forms.Select, choices=CAR_CHOICES)

class CarsModelAdmin(model.ModelAdmin):
    form = CustomForm
    list_filter = ['carmodel']

admin.site.register(Cars,CarsModelAdmin)

相关问题 更多 >

    热门问题