我有一個在模型中「需要」的字段(slug),但想要將ModelAdmin類中的字段更改爲可選。如果用戶沒有填寫,則會自動填入其他字段(名稱)。如何在ModelAdmin內動態處理Django中的表單域?
class SomeModel(model.Model):
name = model.CharField(max_length=255)
slug = model.SlugField(unique=True, max_length=255)
我試圖這樣做的各種方式,如覆蓋內的ModelAdmin get_form()或使用的ModelForm類並指定形式具體。
class SomeModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(self.__class__, self).get_form(request, obj, **kwargs)
form.slug.required = False
return form
但是,這兩種解決方案都不適用於我。除了手動創建表單之外,還有其他更快捷的解決方案嗎?
我有很多這些形式,手工操作可能很繁瑣而且難以維護。
我使用'forms.fields ['slug']。required'得到了一個'AttributeError'表示字段不是一個有效的屬性。提供一個定製的表單是我試圖避免的,因爲涉及的工作量很大,因爲我有很多模型。 另外,我不完全確定爲什麼'super(self .__ class__,self)'會因爲子分類而中斷?不應該基於範圍來找出Python嗎? 感謝您關注此事。 – GoogleDroid 2011-05-21 19:28:45
再次感謝!這是我的一個錯字,但在我的代碼中是正確的,但仍然無法正常工作。我發現從'get_form'返回的表單的類型是'django.forms.models.ModelFormMetaclass'。 'dir(form)'也沒有顯示字段屬性。 – GoogleDroid 2011-05-21 21:01:46