在Django-Admin/Django-Form中通过关联字段

2024-03-05  本文已影响0人  mutang

在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过滤了。

上一篇 下一篇

猜你喜欢

热点阅读