在Django-Admin和Django-Form中,可以通過關(guān)聯(lián)字段進行ManyToMany過濾的解決方法如下:
- 首先掖肋,在你的models.py文件中定義兩個相關(guān)的模型,其中一個模型有一個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中顯示一個多選框飞蛹,用于選擇與產(chǎn)品相關(guān)的類別谤狡。
- 最后,在你的forms.py文件中卧檐,你可以使用ModelForm來創(chuàng)建一個表單墓懂,以便在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小部件來顯示一個多選框列表捕仔,以便在表單中選擇與產(chǎn)品相關(guān)的類別。
這樣盈罐,你就可以在Django-Admin和Django-Form中通過關(guān)聯(lián)字段進行ManyToMany過濾了榜跌。