【问题标题】:Django filter products in admin and add create anew product of the combinationDjango在admin中过滤产品并添加创建组合的新产品
【发布时间】:2016-04-28 17:28:17
【问题描述】:

我正在创建一个服装应用程序,其中包含三个模型 Product 、 Category 、 Outfit 。我的产品模型有字段(标题、Slug、价格、图像网址、颜色、图案、)类别有字段(标题、描述和产品作为产品的外键)装备有(标题、描述和产品多对多到产品)

我的问题是,在我将这些模型添加到管理员后,我想从管理面板创建服装,这就是我卡住的地方。如何从管理面板将多个产品添加到装备中,我有一个大型数据库,因此从下拉菜单中选择不是选项我想要的是过滤器设置所有字段的产品,当我过滤显示要选择的产品时所有过滤后的产品并将它们添加到装备中。

为了更清楚,这里有一个例子 一套搭配酒红色条纹衬衫、海军蓝色工装裤、黑色皮带和棕色绒面革乐福鞋。现在在我的管理员中创建服装时,我需要从我的产品模型中添加所有这些产品,方法是用(颜色:酒红色和图案:条纹)过滤衬衫,然后用(海军蓝:颜色)皮带和(皮革:材料)和乐福鞋过滤货物与(材料:绒面革和颜色:棕色)如您所见,不同的产品需要以不同的方式过滤,请建议我如何实现这一点以改变我的模型结构我想以最好的方式实现这一点

【问题讨论】:

    标签: django django-models django-forms django-admin django-filter


    【解决方案1】:

    你试过 filter_horizo​​ntal 吗? Admin

    【讨论】:

    • 不,你能举个例子说明我只用 filterset 试过,filter_horizo​​ntal 可以过滤多个属性吗?
    【解决方案2】:

    你需要像这样自定义管理员

    #models.py
    class Outfit(models.Model):
    
        products = models.ManyToManyField(Product, blank=True)
        title = models.CharField(max_length=30)
        description = models.CharField(max_length=255)
    
    #admin.py
    from django.contrib.admin.widgets import FilteredSelectMultiple
    
    class OutfitForm(forms.ModelForm):    
        products = forms.ModelMultipleChoiceField(
            required=False,
            queryset=Product.objects.all(),
            widget=FilteredSelectMultiple("Products", is_stacked=False),
            label='')
    
    
    class OutfitFormAdmin(admin.ModelAdmin):
        form = OutfitForm
        list_display = ('title', 'description', 'products')
        fieldsets = (
            ('General', {
                'fields': (
                    'title',
                    'description'
                )
            }),
            ('Select products', {
                'fields': ('products',)
            }),
        )
    

    【讨论】:

    • Pavan 您的解决方案肯定解决了我如何选择多个字段并将其添加到我的装备,但我面临的问题是我的产品模型具有与一种产品相关的不同属性,例如衬衫产品具有属性颜色,图案等我想选择这些属性并过滤结果,然后将该项目添加到我的装备中,在您的示例中,我得到一个搜索栏来过滤多个产品,但无法选择这些属性
    猜你喜欢
    • 2019-05-14
    • 2019-06-20
    • 1970-01-01
    • 2018-08-24
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多