在Django-Admin/Django-Form中通过关联字段进行ManyToMany过滤

在Django-Admin和Django-Form中,可以通过关联字段进行ManyToMany过滤的解决方法如下:

  1. 首先,在你的models.py文件中定义两个相关的模型,其中一个模型有一个ManyToMany字段。例如:
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=100)
    categories = models.ManyToManyField(Category)

    def __str__(self):
        return self.name

  1. 然后,在你的admin.py文件中注册这两个模型,并为ManyToMany字段添加过滤器。例如:
from django.contrib import admin
from .models import Category, Product

class ProductAdmin(admin.ModelAdmin):
    filter_horizontal = ('categories',)

admin.site.register(Category)
admin.site.register(Product, ProductAdmin)

在上面的例子中,我们使用filter_horizontal属性添加了一个水平过滤器,以便在Django-Admin中显示一个多选框,用于选择与产品相关的类别。

  1. 最后,在你的forms.py文件中,你可以使用ModelForm来创建一个表单,以便在Django-Form中进行ManyToMany过滤。例如:
from django import forms
from .models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('name', 'categories')
        widgets = {
            'categories': forms.CheckboxSelectMultiple
        }

在上面的例子中,我们使用CheckboxSelectMultiple小部件来显示一个多选框列表,以便在表单中选择与产品相关的类别。

这样,你就可以在Django-Admin和Django-Form中通过关联字段进行ManyToMany过滤了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容