django app:无法指定"''":"ImageText.link"必须是"链接"实例

 嘻嘻嘻嘻 发布于 2023-02-13 13:23

我正在为我的Django 1.5.1和Django-cms安装构建一个应用程序.该应用程序旨在允许上传链接到URL的图像.我的代码:

cms_plugins.py

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from cms.plugins.text.widgets.wymeditor_widget import WYMEditor
from django.forms.fields import CharField
from models import ImageText

class ImageTextPlugin(CMSPluginBase):
    model = ImageText
    name = "video wall"
    render_template = "video.html"

def render(self, context, instance, placeholder):
    context.update({
        'object':instance,
    })
    return context


  plugin_pool.register_plugin(ImageTextPlugin)

models.py

 from django.db import models
 from django.db.models import fields 
 from filer.fields.image import FilerImageField
 from filer.fields.file import FilerFileField
 from cms.models import CMSPlugin


 class ImageText(CMSPlugin):
      image = FilerImageField(related_name="image0")
      link = models.CharField(max_length=255, blank=True)

admin.py

 from django.contrib import admin
 from models import ImageText

 class ImageTextAdmin(admin.ModelAdmin):
    pass


  admin.site.register(ImageText, ImageTextAdmin)

video.html

 
   
work module image

当我尝试在cms占位符中安装我的应用程序实例时出现此错误:

 ValueError at /admin/cms/page/51/edit-plugin/1839/
 Cannot assign "''": "ImageText.link" must be a "Link" instance.

我不明白是什么造成的.任何的想法?

我的pip冻结了

BeautifulSoup==3.2.1
Django==1.5.1
MySQL-python==1.2.4
PIL==1.1.7
Pillow==2.2.1
South==0.8.2
cmsplugin-filer==0.9.5
cmsplugin-zinnia==0.4
django-appconf==0.6
django-blog-zinnia==0.12.3
django-classy-tags==0.4
django-cms==2.4.2
django-filer==0.9.5
django-haystack==1.2.7
django-mptt==0.5.2 
django-polymorphic==0.5.3
django-sekizai==0.7
django-tagging==0.3.1
django-tinymce==1.5.1
django-twitter-tag==1.2
django-xmlrpc==0.1.5
easy-thumbnails==1.4
html5lib==1.0b3
pyparsing==1.5.7
pysolr==3.1.0
pytz==2013.7
requests==2.0.1
six==1.2.0
twitter==1.9.1
wsgiref==0.1.2

Paulo.. 7

这里的问题与您的架构没有多大关系,而是django如何处理OneToOne关系.

当你CMSPlugin继承子类时,django会创建一个OneToOne从模型到CMSPlugin反之的隐式关系,反之亦然.

在这种情况下,想象一下以下场景:

我有一个名为的插件Title:

class Title(CMSPlugin):
    text = models.CharField(max_length=200)

上面的模型可以CMSPlugin通过cmsplugin_ptr属性访问表,CMSPlugin实例可以Title通过自动创建的属性"title"< - classname.lower()访问它.

所以考虑到上面的例子,如果现在我想要另一个调用的插件 Video

class VideoPlugin(CMSPlugin):
    title = models.CharField(max_length=200)

这就是问题所在,当您保存视频插件时,该title字段会与上一个插件中自动生成的title属性冲突,从而抛出一个 Cannot assign "''": "VideoPlugin.title" must be a "Title" instance.

在文档中非常轻易地提到了这一点.

因此,在您的情况下,您需要做的就是将link字段重命名为其他内容.我通常用他们的类名命名我的插件的字段,所以在你的情况下我最终会得到

class ImageText(CMSPlugin):
      image_text_image = FilerImageField(related_name="image0")
      image_text_link = models.CharField(max_length=255, blank=True)

这样你就可以避免与其他插件发生任何冲突.

1 个回答
  • 这里的问题与您的架构没有多大关系,而是django如何处理OneToOne关系.

    当你CMSPlugin继承子类时,django会创建一个OneToOne从模型到CMSPlugin反之的隐式关系,反之亦然.

    在这种情况下,想象一下以下场景:

    我有一个名为的插件Title:

    class Title(CMSPlugin):
        text = models.CharField(max_length=200)
    

    上面的模型可以CMSPlugin通过cmsplugin_ptr属性访问表,CMSPlugin实例可以Title通过自动创建的属性"title"< - classname.lower()访问它.

    所以考虑到上面的例子,如果现在我想要另一个调用的插件 Video

    class VideoPlugin(CMSPlugin):
        title = models.CharField(max_length=200)
    

    这就是问题所在,当您保存视频插件时,该title字段会与上一个插件中自动生成的title属性冲突,从而抛出一个 Cannot assign "''": "VideoPlugin.title" must be a "Title" instance.

    在文档中非常轻易地提到了这一点.

    因此,在您的情况下,您需要做的就是将link字段重命名为其他内容.我通常用他们的类名命名我的插件的字段,所以在你的情况下我最终会得到

    class ImageText(CMSPlugin):
          image_text_image = FilerImageField(related_name="image0")
          image_text_link = models.CharField(max_length=255, blank=True)
    

    这样你就可以避免与其他插件发生任何冲突.

    2023-02-13 13:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有