我希望内联表单只显示其字段内容,不允许用户编辑或删除条目,只需添加它们。这意味着使用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
字段为readonly。
在最后一行中,如果我将widget属性更改为['disabled'] = True
,它可以正常工作,但我需要一个文本条目,而不是一个禁用的表单字段。我也知道我需要覆盖save_model()
和save_formsets()
才能使其正常工作。
答案 0 :(得分:0)
我会使用extra=1
来获取最后一个工作表单。
然后遍历视图中除最后一个之外的所有表单,并像这样更改每个字段:In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?
您不必在__init__
中执行此操作,您可以在创建整个表单集后访问这些属性。