在Django-Admin和Django-Form中,可以通过关联字段进行ManyToMany过滤的解决方法如下:
- 首先,在你的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
- 然后,在你的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中显示一个多选框,用于选择与产品相关的类别。
- 最后,在你的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过滤了。
网友评论