我试图使用下面的代码将自定义字段添加到InlineFormset中,但是字段不会出现在Django管理中。InlineFormset是否太过锁定,不允许这样做?我的打印"ding“测试会像预期的那样触发,我可以打印出form.fields并在那里看到它们,但是实际的字段从未呈现在管理程序中。
admin.py
from django.contrib import admin
import models
from django.forms.models import BaseInlineFormSet
from django import forms
from forms import ProgressForm
from django.template.defaultfilters import slugify
class ProgressInlineFormset(BaseInlineFormSet):
    def add_fields(self, form, index):
        print "ding"
        super(ProgressInlineFormset, self).add_fields(form, index)
        for criterion in models.Criterion.objects.all():
            form.fields[slugify(criterion.name)] = forms.IntegerField(label=criterion.name)
class ProgressInline(admin.TabularInline):
    model = models.Progress
    extra = 8
    formset = ProgressInlineFormset
class ReportAdmin(admin.ModelAdmin):
    list_display = ("name", "pdf_column",)
    search_fields = ["name",]
    inlines = (ProgressInline,)
admin.site.register(models.Report, ReportAdmin)发布于 2009-02-09 12:12:45
model = models.Progress在admin中,只有在这个进度模型中定义的字段。您没有字段/字段集选项覆盖它。
如果要添加新的选项,有两个选项:
看看字段,场集。
发布于 2010-02-12 10:06:37
我做了另一种方式:
forms.py:
from django import forms
class ItemAddForm(forms.ModelForm):
    my_new_field = forms.IntegerField(initial=1, label='quantity')
    class Meta:
        model = Itemadmin.py:
from django.contrib import admin
from forms import *
class ItemAddInline(admin.TabularInline):
    form = ItemAddForm
    fields = (..., 'my_new_field')到目前为止,我只需要覆盖保存方法来处理这个新字段。看这个:http://docs.djangoproject.com/en/dev/ref/contrib/admin/#form。它说默认情况下内联使用BaseModelForm,这是发送给formset_factory的。它对我不起作用,尝试用错误子类BaseModelForm (没有属性'_meta')。所以我用ModelForm代替。
发布于 2014-11-14 08:27:09
您可以通过另一种方式(动态表单):
admin.py
class ProgressInline(admin.TabularInline):
    model = models.Progress
    extra = 8
    def get_formset(self, request, obj=None, **kwargs):
        extra_fields = {'my_field': forms.CharField()}
        kwargs['form'] = type('ProgressForm', (forms.ModelForm,), extra_fields)
        return super(ProgressInline, self).get_formset(request, obj, **kwargs)https://stackoverflow.com/questions/526795
复制相似问题