【问题标题】:How to add fields to third party app model?如何向第三方应用模型添加字段?
【发布时间】:2016-08-21 15:20:25
【问题描述】:

我正在开发一个使用Django-quiz 应用程序的网页。当您安装django-quiz 时,您可以在Admin 中创建测验、问题等。

不幸的是,没有办法,如何将Quiz分配给我的模型Language所以我正在寻找一种方法,如何将字段Language添加到模型Quiz中。

我已经尝试过了,但它不起作用。我已经尝试创建带有附加字段的代理模型,但我意识到在代理模型中这是不可能的。

from quiz.models import Sitting,Quiz

class QuizAddLanguage(models.Model):
    quiz = models.OneToOneField(Quiz)
    language = models.ForeignKey(Language)

您知道如何将字段添加到第三方应用模型吗?

【问题讨论】:

标签: django django-models django-apps django-quiz


【解决方案1】:

这次,OneToOne 应该就足够了——每种语言都会有一个测验

由于是一对一的,所以你可以在自己的语言类上定义关系,django默认会为你提供反向查找的意思

language_obj.quiz
quiz_obj.language

两者都有效。

【讨论】:

  • 哦,谢谢,这是一个非常优雅的解决方案。但我在“测验”字段中看不到模型选择“语言”字段。我怎么能那样做?我正在考虑更改管理类 QuizInlineLanguage(admin.StackedInline): fields =[Quiz.language]; unregister(Quiz) register(Quiz,QuizInlineLnaugage) 但它说 Quiz 没有注册。
  • @Milano - 我不明白你的评论,但听起来你在谈论模型管理类,这是一个单独的问题
  • 我想将语言模型添加到测验模型中,以便为测验分配语言。但我也必须让它在管理员中工作,因为那是管理员创建测验的地方。
  • 对不起句子:“但我在'测验'字段中看不到模型选择'语言'字段。”我的意思是:“我看不到测验表单中的语言字段管理员”
【解决方案2】:

这是一张相关的 Django 票,六年前以“wontfix”的决议关闭:

https://code.djangoproject.com/ticket/14969

我认为this comment 提供了一些很好的信息:

Comments 为您提供了*正确*的方法来处理这个问题——您定义一个接口,并使模型本身可插入。并非所有 Django 的 contrib 应用程序都遵循这种方法,但这并不意味着我们将 monkeypatching 融入核心——我们修复了 contrib 应用程序。

django.contrib.comments 现在是一个独立的应用程序,但它仍然使自己相对容易定制。以下是相关文档:

https://django-contrib-comments.readthedocs.io/en/latest/custom.html

如果第三方应用程序无法轻松自定义,我建议让开发人员对其进行更新,并将其指向上述链接以获取有关如何进行此操作的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2010-10-24
    相关资源
    最近更新 更多