我想要一個內聯表單只顯示其字段內容,並且不讓用戶編輯或刪除條目,只添加它們。這意味着在使用readonly_fields
選項時,這些值將類似,並且底部的「添加另一個...」鏈接會使表單顯示,讓用戶添加更多條目。Django:自定義「只添加」內聯
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
場爲只讀。
在最後一行中,如果我將widget屬性更改爲['disabled'] = True
,它工作正常,但我需要一個文本項,而不是禁用的表單域。我也知道,我需要重寫save_model()
和save_formsets()
,以使其正常工作。