【发布时间】:2011-05-11 01:31:17
【问题描述】:
我希望内联表单仅显示其字段内容,并且不允许用户编辑或删除条目,仅添加它们。这意味着当使用readonly_fields 选项时值会相似,并且底部的“添加另一个...”链接会出现一个表单,让用户添加更多条目。
can_delete 选项在这里很有用,但 readonly_fields 锁定既可以添加也可以更改。我想构建一个新的内联模板就可以了。在那种情况下,我如何只显示每个条目的字段值,然后在底部放置一个表单?
编辑:到目前为止我得到了什么:
# models.py
class AbstractModel(models.Model):
user = models.ForeignKey(User, editable = False)
... some more fields ...
class Meta:
abstract = True
class ParentModel(AbstractModel):
... fields ...
class ChildModel(AbstractModel):
parent = models.ForeignKey(ParentModel, ... options ...)
... fields ...
# admin.py
class ChildModelInline(admin.TabularInline):
model = ChildModel
form = ChildModelForm
can_delete = False
class ParentModelAdmin(admin.ModelAdmin):
... options ...
inlines = (ChildModelInline,)
# forms.py
class ChildModelForm(models.ModelForm):
user = forms.CharField(required = False)
... some more fields and stuff needed ...
def __init__(self, *args, **kwargs):
super(ChildModelForm, self).__init__(*args, **kwargs)
try: user = User.objects.get(id = self.instance.user_id)
except: return None
self.fields['user'].initial = user.first_name
self.fields['user'].widget.attrs['readonly'] = 'readonly'
在此示例中,我希望 user 字段为只读。
在最后一行,如果我将小部件属性更改为['disabled'] = True,它可以正常工作,但我需要一个文本条目,而不是禁用的表单字段。我也知道我需要覆盖 save_model() 和 save_formsets() 才能正常工作。
【问题讨论】:
标签: django django-admin django-forms