如何在Django中创建相关模型的实例
我正在开发一个内容管理系统(CMSy)应用程序,为此我实现了一套模型,允许创建自定义模板实例。这些模板由多个字段组成,并且与特定客户关联。最终目标是通过管理界面定义一个或多个带有自定义字段的模板,并将其与客户关联,这样客户就可以根据模板的要求创建内容对象。
我似乎已经成功地连接了这些内容,以便我可以创建任意数量的模板对象,但我在如何在这些模板中创建实例(也就是实际的内容对象)方面遇到了困难。例如,我可以为客户“Acme”定义一个名为“基本页面”的模板,其中包含“标题”和“正文”这两个字段,但我还没弄明白如何创建“基本页面”实例,以便填写这些字段。
以下是我的(略微简化的)模型...
class Customer(models.Model):
...
class Field(models.Model):
label = models.CharField(max_length=255)
component = models.ForeignKey(ContentType,
limit_choices_to={'id__in': component_choices}
)
fields = models.Manager()
class Template(models.Model):
label = models.CharField(max_length=255)
clients = models.ManyToManyField(Customer, blank=True)
fields = models.ManyToManyField(Field, blank=True)
class ContentObject(models.Model):
label = models.CharField(max_length=255)
template = models.ForeignKey(Template)
author = models.ForeignKey(User)
customer = models.ForeignKey(Customer)
mod_date = models.DateTimeField('Modified Date', editable=False)
def __unicode__(self):
return '%s (%s)' % (self.label, self.template)
def save(self):
self.mod_date = datetime.datetime.now()
super(ContentObject, self).save()
提前感谢任何建议!
4 个回答
0
抱歉,如果我之前没说清楚。问题在于如何根据一个模板来创建实例,而不是如何创建这些模板。
我的模板类是用来定义一个模板包含哪些字段,以及哪些客户可以使用这个模板。我的内容对象类是用来根据模板定义一个内容记录的。
再次感谢!
0
这段代码就是这样:
my_customer.templates.add(my_template)
其中 my_customer
和 my_template
分别是 Customer
和 Template
的实例,也就是具体的对象。
可以查看 关于相关对象的文档 来了解更多信息。
1
如果你想继续使用这个模型架构,你需要在ContentObject类中添加一个新的字段,用来存储实际的内容。这个字段可以是这样的:
ContentObject(models.Model):
...
fields_content = models.ManyToManyField(Field, through=FieldContent)
...
然后:
class FieldContent(models.Model):
field = ForeignKey(Field)
content_object = ForeignKey(ContentObject)
content = CharField
接下来,你需要确保,可能通过使用pre_save信号,确保对于某个特定的ContentObject实例,只有在该实例的模板中存在的字段才能存入FieldContent表。
然后你可以通过类似下面的方式来创建实际的内容:
FieldContent.objects.create(field=your_field, content_object=your_content_object, content=content_given_by_the_customer)