Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

在Django中,要实现自定义管理表单中多对多的“绿色加号”功能,你需要定义一个`ModelAdmin`的子类,并在其中覆盖`get_formset`方法。这个方法允许你控制如何生成表单集以及表单集中的每个字段的外观和行为。

下面是一个详细的步骤和代码示例:

1. 首先,定义你的模型和`admin.py`文件中的`ModelAdmin`子类:
```python
# models.py
from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    related_models = models.ManyToManyField('RelatedModel')

# admin.py
from django.contrib import admin
from .models import MyModel

class RelatedModelInline(admin.TabularInline):
    model = MyModel.related_models.through
    extra = 0  # 这里设置为0,表示初始不显示“绿色加号”

class MyModelAdmin(admin.ModelAdmin):
    inlines = [RelatedModelInline]

admin.site.register(MyModel, MyModelAdmin)
```
在这个例子中,我们定义了一个名为`MyModel`的模型,它有一个多对多字段`related_models`。我们还创建了一个`RelatedModelInline`类,用于在Django admin界面中显示这个多对多关系。

2. 接下来,你需要覆盖`get_formset`方法,以添加“绿色加号”功能:
```python
class MyModelAdmin(admin.ModelAdmin):
    inlines = [RelatedModelInline]

    def get_formset(self, request, obj=None, **kwargs):
        formset = super().get_formset(request, obj, **kwargs)

        # 添加“绿色加号”功能
        for form in formset:
            form.fields['related_models'].widget.can_add_related = True  # 设置为True以启用“绿色加号”

        return formset
```
在这段代码中,我们首先调用父类的`get_formset`方法来获取表单集。然后,遍历每一项表单,并设置其“相关对象字段”的 widget 的 `can_add_related` 属性为True。这会显示“绿色加号”,允许用户在表单中添加新的相关对象。

3. 最后,确保你的模型和`admin.py`文件都正确配置好了,然后在Django admin界面中查看`MyModel`。这时,“绿色加号”应该已经生效了。

测试用例:
1. 登录到Django admin界面。
2. 在`MyModel`管理页面上创建一个新的条目。
3. 在“相关对象字段”下,点击“绿色加号”,你应该能够看到一个模态窗口,允许你添加新的相关对象。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潮易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值