Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django FeinCMS,内容类型字段的中间模型_Django_Feincms - Fatal编程技术网

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()创建新类型
,但您可能不应该这样做。我希望更简单的方法适合您。