Django FeinCMS,内容类型字段的中间模型
我正在努力实现以下目标:Django FeinCMS,内容类型字段的中间模型,django,feincms,Django,Feincms,我正在努力实现以下目标: class DownloadContentFiles(models.Model): download_content = models.ForeignKey('DownloadContent') media_file = models.ForeignKey(MediaFile) class DownloadContent(models.Model): files = models.ManyToManyField(MediaFile, throu
class DownloadContentFiles(models.Model):
download_content = models.ForeignKey('DownloadContent')
media_file = models.ForeignKey(MediaFile)
class DownloadContent(models.Model):
files = models.ManyToManyField(MediaFile, through=DownloadContentFiles)
class Meta:
abstract=True
我明白为什么这不起作用了。因为下载内容上的摘要
是否有为contenttype字段指定中间模型的解决方法?可能明确定义
类名
对您有用。大概是这样的:
class DownloadContentFiles(models.Model):
download_content = models.ForeignKey('MyDownloadContent')
media_file = models.ForeignKey(MediaFile)
class DownloadContent(models.Model):
files = models.ManyToManyField(MediaFile, through=DownloadContentFiles)
class Meta:
abstract=True
Page.create_content_type(DownloadContent, class_name="MyDownloadContent")
也许明确地定义
类名
对你有用。大概是这样的:
class DownloadContentFiles(models.Model):
download_content = models.ForeignKey('MyDownloadContent')
media_file = models.ForeignKey(MediaFile)
class DownloadContent(models.Model):
files = models.ManyToManyField(MediaFile, through=DownloadContentFiles)
class Meta:
abstract=True
Page.create_content_type(DownloadContent, class_name="MyDownloadContent")
通常,如果在创建字段(如选项列表)或具体的Django模型(如您所做)时需要更多信息,可以使用
initialize\u type
class DownloadContent(models.Model):
@classmethod
def initialize_type(cls):
cls.add_to_class('files', ... your model field ...)
MediaFileContent
使用此方法添加类型
选择器:
但是在您的情况下,这不起作用,因为您还必须通过模型动态创建。这样做的原因是,对于每个具体的DownloadContent
,您需要另一个具体的DownloadContentFiles
模型
您可以通过使用类型
内置动态创建新的下载内容文件
具体类来实现这一点(当使用下载内容
与不同的CMS基础,例如page.page
和elephantblog.Entry
时,请注意名称冲突)
也许是一种更简单的方法来实现您的目标:
- 在某个地方添加一个
下载
模型,并将文件
ManyToManyField
添加到此类中
DownloadContent
仅包含一个ForeignKey(下载)
是的,你需要另一个型号。这可能是值得的,因为您可以为下载
构建更好的编辑界面,并且页面编辑器也得到了简化,因为您只需选择一个已经存在的下载
模型即可在页面上显示它们。通常,如果您在创建字段时需要更多信息(如选项列表)或具体的Django模型(如您所做的),您可以为此使用initialize\u type
class DownloadContent(models.Model):
@classmethod
def initialize_type(cls):
cls.add_to_class('files', ... your model field ...)
MediaFileContent
使用此方法添加类型
选择器:
但是在您的情况下,这不起作用,因为您还必须通过
模型动态创建。原因是对于每个具体的下载内容
,您需要另一个具体的下载内容文件
模型
您可以通过使用类型
内置动态创建新的下载内容文件
具体类来实现这一点(当使用下载内容
与不同的CMS基础,例如page.page
和elephantblog.Entry
时,请注意名称冲突)
也许是一种更简单的方法来实现您的目标:
- 在某个地方添加一个
下载
模型,并将文件
ManyToManyField
添加到此类中
DownloadContent
仅包含一个ForeignKey(下载)
是的,您需要另一个模型。这可能是值得的,因为您可以为下载
构建一个更好的编辑界面,并且页面编辑器也得到简化,因为您只需选择一个现有的下载
模型在页面上显示它们。您的下载内容文件
不是models.Model
哦,是的,那应该已经在问题中了。不是问题。你的DownloadContentFiles
不是模型的子类。Model
哦,是的,那应该已经在问题中了。不是问题。谢谢,我不知道如何实现“为e动态创建新的下载内容文件”ach DownloadContent的部分。我可以在初始化类型中执行此操作吗?我现在将使用simpeler方法。您可以使用type()创建新类型
,但您可能不应该。我希望更简单的方法对您有效。谢谢,我不知道如何实现“为每个下载内容动态创建新的下载内容文件”部分。我可以在initialize_type中执行此操作吗?我现在将使用simpeler方法。您可以使用type()创建新类型
,但您可能不应该这样做。我希望更简单的方法适合您。