[英]Django: one ModelForm for subclasses
我有一個像這樣的抽象模型:
class BaseAgent(models.Model):
name = models.CharField('Name', max_length=128, null=False, default='')
class Meta:
abstract = True
我正在使用確切的代理類型創建此模型的子類。 例如,Agent001,Agent002等。
對於每個子類,我只希望有一個ModelForm
表單類。 我將其傳遞給UpdateView
視圖。 但這需要指定Meta.model
。
class AgentEditForm(ImprovedForm, forms.ModelForm):
class Meta:
model = BaseAgent # here I would like to have Agent001, Agent002 or others
exclude = ()
我有一個ModelForm
的子類,其中添加了一些mixin,並且想使用此類(我們稱其為ImprovedForm
)。
理想情況下,我想在urls.py
使用一個字符串來調用僅傳遞模型名稱(以及表單)的視圖。
url(r'^agent001/new$', login_required(views.AgentCreateUpdateView.as_view(model=Agent001, form=ImprovedAgentForm)), name='new_agent001'),
當然,我可以為每個模型創建一個表單,如下所示:
class Agent001EditForm(AgentEditForm):
class Meta:
model = Agent001
但這只是復制粘貼。 想象一下,我有兩個以上的班級,將來還會有更多。 我想要一個通用的解決方案。
如何用最少的代碼行做到這一點?
forms.py
import sys
for model in (Agent001, Agent002):
form_name = model.__name__ + 'EditForm'
class AgentEditForm(forms.ModelForm):
class Meta:
model = model
exclude = ()
AgentEditForm.__name__ = form_name
setattr(sys.modules[__name__], form_name , AgentEditForm)
del AgentEditForm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.