Sov*_*iut 6 python django field formset inline-formset
我正在尝试使用以下代码将自定义字段添加到InlineFormset,但字段不会显示在Django Admin中.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)
Run Code Online (Sandbox Code Playgroud)
我用另一种方式做到了:
表格.py:
from django import forms
class ItemAddForm(forms.ModelForm):
my_new_field = forms.IntegerField(initial=1, label='quantity')
class Meta:
model = Item
Run Code Online (Sandbox Code Playgroud)
管理.py:
from django.contrib import admin
from forms import *
class ItemAddInline(admin.TabularInline):
form = ItemAddForm
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是有效的,我只需要以某种方式覆盖 save 方法来处理这个新字段。请参阅:http : //docs.djangoproject.com/en/dev/ref/contrib/admin/#form。它说默认情况下内联使用 BaseModelForm,它被发送到 formset_factory。它对我不起作用,试图将 BaseModelForm 子类化为错误(无属性“_meta”)。所以我使用 ModelForm 代替。
model = models.Progress
Run Code Online (Sandbox Code Playgroud)
在管理中将只有在此进度模型中定义的字段。您没有覆盖它的字段/字段集选项。
如果您想添加新的,有两种选择:
在管理模型(admin.TabularInline)中,添加如下内容:
字段=('新字段1','新字段2','新字段3')
归档时间: |
|
查看次数: |
5671 次 |
最近记录: |