在 Django 中,给出了应用程序动物的摘录,如下所示:
带有以下内容的动物/模型.py:
from django.db import models
from django.contrib.contenttypes.models import ContentType
class Animal(models.Model):
content_type = models.ForeignKey(ContentType,editable=False,null=True)
name = models.CharField()
class Dog(Animal):
is_lucky = models.BooleanField()
class Cat(Animal):
lives_left = models.IntegerField()
还有一个动物/urls.py:
from django.conf.urls.default import *
from animals.models import Animal, Dog, Cat
dict = { 'model' : Animal }
urlpatterns = (
url(r'^edit/(?P<object_id>\d+)$', 'create_update.update_object', dict),
)
如何使用通用视图来编辑 Dog 和/或 Cat 使用相同的表单?
即传递给animals/animal_form.html的表单对象将是Animal,因此不会包含派生类Dog 和Cat 的任何细节。我怎么能让 Django 自动将子类的表单传递给animal/animals_form.html?
顺便说一句,我使用Djangosnippets #1031进行 ContentType 管理,因此 Animal 将有一个名为as_leaf_class的方法,该方法返回派生类。
显然,可以为每个派生类创建表单,但这是很多不必要的重复(因为模板都是通用的——本质上是 {{ form.as_p }})。
顺便说一句,最好假设 Animal 可能是具有相同问题的几个不相关的基类之一,因此理想的解决方案将是通用的。
预先感谢您的帮助。