【问题标题】:model inheritance + django admin模型继承 + django admin
【发布时间】:2013-09-10 12:34:42
【问题描述】:

我正在重用来自 cmsplugin_news 的 News 模型,只是在我的继承模型中添加了一些额外的字段。 (多表继承,同explained here

from cmsplugin_news.models import News

class News(News):
    departments = models.ManyToManyField('department.Department', blank=True, related_name="news")

在我的 admin.py 上,我正在扩展 NewsAdmin 以设置我自己的表单:

class MyNewsAdmin(NewsAdmin):
    form = NewsModelForm

我在 forms.py 中定义的:

from news.models import News

class NewsModelForm(NewsForm):
    class Meta:
        model = News
        widgets = {
            'excerpt': CKEditorWidget(config_name='basic'),
            'content': CKEditorWidget(config_name='default')
        }

    def _get_widget(self):
        from ckeditor.widgets import CKEditorWidget
        return CKEditorWidget()

当我从 shell 控制台保存对象时,模型继承似乎运行良好。但是当我尝试从 django 管理员创建一个 MyNews 对象并将其链接到一个部门时,该字段不会被保存。或者至少在任何地方都没有显示这种变化

unicms-testnews=> select * from cmsplugin_news_news;
 id | title | slug | excerpt | content | is_published |        pub_date        |            created            |            updated            | link 
----+-------+------+---------+---------+--------------+------------------------+-------------------------------+-------------------------------+------
  1 | dfad  | dfad |         |         | f            | 2013-09-10 13:44:46+02 | 2013-09-10 13:45:04.709556+02 | 2013-09-10 13:57:05.568696+02 | 
(1 row)
unicms-testnews=> select * from news_news;
 news_ptr_id 
-------------
           1
(1 row)

unicms-testnews=> select * from news_news_departments;
 id | news_id | department_id 
----+---------+---------------
  1 |       1 |             1
(1 row)

我什么都不懂,谁能帮帮我?非常感谢!

【问题讨论】:

    标签: django django-admin multi-table-inheritance


    【解决方案1】:

    您为News 创建了一个表单,该表单也存在于您的数据库中,因为模型不是抽象的,而不是MyNews。因此,您当前的表单没有departments 属性的字段,即使您添加了一个带有输入的小部件。请改用下面的代码:

    class MyNewsForm(NewsForm):
        class Meta:
            model = MyNews # instead of just News
            ...
    

    Django 在后台所做的是创建两个关系:cmsplugin_news_news 存储所有 News 字段,news_news_departments 存储您的新字段并与第一个关系一对一的关系。

    【讨论】:

    • 很抱歉,我已经将它链接到“我的”新闻类...只是在此处转录时出现拼写错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2015-09-29
    • 2015-03-05
    • 2010-11-08
    相关资源
    最近更新 更多