jar*_*lan 10 django django-forms django-admin
如何在django admin的内联中设置第一个默认行/值?
class Employee(models.Model):
username = models.CharField(_('Username'), max_length=150, null=False, blank=False)
email = models.CharField(_('Email'), max_length=150, null=False, blank=False)
class Details(models.Model):
employee = models.ForeignKey(Employee, verbose_name=_('Employee'), blank=False, null=False)
label = models.CharField(_('Label'), max_length=150, null=False, blank=False)
value = models.CharField(_('Value'), max_length=150, null=False, blank=False)
class DetailsFormset(forms.models.BaseInlineFormSet):
def __init__(self, *args, **kwargs):
self.initial = [
{ 'label': 'first name'},
{'label': 'last name'},
{'label': 'job',}]
super(DetailsFormset, self).__init__(*args, **kwargs)
class DetailsInline(admin.TabularInline):
model = Details
formset = DetailsFormset
fieldsets = [
['', {'fields': ['employee', 'label', 'value']}]
]
class EmployeeAdmin(admin.ModelAdmin):
inlines = [DetailsInline]
Run Code Online (Sandbox Code Playgroud)
但这一行不起作用
self.initial = [
{ 'label': 'first name'},
{'label': 'last name'},
{'label': 'job',}]
Run Code Online (Sandbox Code Playgroud)
如何使用django admin设置默认值?
cat*_*ine 13
from django.utils.functional import curry
class DetailsInline(admin.TabularInline):
model = Details
formset = DetailsFormset
extra = 3
def get_formset(self, request, obj=None, **kwargs):
initial = []
if request.method == "GET":
initial.append({
'label': 'first name',
})
formset = super(DetailsInline, self).get_formset(request, obj, **kwargs)
formset.__init__ = curry(formset.__init__, initial=initial)
return formset
Run Code Online (Sandbox Code Playgroud)
从这里:预先填充内联FormSet?
如果您需要为创建的新表单定义默认值,您可以重新定义empty_form
a 的属性InlineFormSet
:
class MyDefaultFormSet(django.forms.models.BaseInlineFormSet):
@property
def empty_form(self):
form = super(MyDefaultFormSet, self).empty_form
# you can access self.instance to get the model parent object
form.fields['label'].initial = 'first name'
# ...
return form
class DetailsInline(admin.TabularInline):
formset = MyDefaultFormSet
Run Code Online (Sandbox Code Playgroud)
现在,每次您添加新表单时,它都会包含您提供的初始数据。我已经在 django 1.5 上测试过这个。
归档时间: |
|
查看次数: |
8007 次 |
最近记录: |