【问题标题】:How to make admin page of django do this particular thing?如何让 django 的管理页面做这个特别的事情?
【发布时间】:2011-12-23 04:18:45
【问题描述】:

我正在使用 django 管理页面将问题放入数据库。

我的 models.py 是这样的:

从 django.db 导入模型

# Create your models here.

class Question(models.Model):
    question_name = models.CharField(max_length=200)
    question_type = models.CharField(max_length=20)
    def __unicode__(self):
            return self.question_name


class PythonQuestion(models.Model):
    question_no = models.ForeignKey(Question)
    question_text = models.TextField(max_length=1000)
    question_testcase = models.TextField(max_length=1000)
    question_difflevel = models.CharField(max_length=20)

我希望对我的 django-admin 页面进行这些特殊更改:-

  1. 到目前为止,当我能够从管理页面将内容添加到 Question 模型和 PythonQuestion 模型时。我想要的是我应该能够写入 Question 模型,然后被定向到可以将数据写入 PythonQuestion 模型的页面。我的页面已启动并正在运行;我需要的只是链接的引导。

  2. 我想以某种文件格式上传每个问题的答案(此处的格式无关紧要。让我们假设一个文本文件)。我如何在管理页面中做到这一点?

【问题讨论】:

  • 在 PythonQuestion 是 Question 的子类的情况下不使用继承方法是否有特殊原因?你有一个答案模型来链接到问题吗?
  • 没有。我不。在这里使用继承会更好吗?

标签: python django


【解决方案1】:

从概念上讲,我认为它可能是。你可以read more about it in the django docs 但本质上 Django 有 3 种类型的继承; 抽象、多表和代理,它们在不同的情况下都有用:

  • 当您的基类永远不需要自己实例化(即基模型没有表但它的子模型都有表)时,抽象继承很有用
  • 当您有一个本身有用但可以扩展的基本模型(即基本模型有一个表而它的子模型都有表)时,多表继承很有用
  • 代理在您只想扩展父模型的功能时很有用(即,基本模型有一个表,但它的子模型没有表)

还有一个简单的例子(多表):

class Answer(models.Model):
    answer_text = models.CharField(...)

class Question(models.Model):
    """What all questions have in common"""
    title = models.CharField(...)
    text = models.CharField(...)
    answer = models.ForeignKey(Answer)

class PythonQuestion(Question):
    """What specifics a python question might have"""
    python_version = models.CharField(...)

您将能够在 django admin 中一次性输入所有数据(这对于多表继承和抽象继承都是相同的)。此外,您对每个问题都有一个答案。如果需要,这些答案可以通过夹具上传(或通过管理员手动输入)

【讨论】:

  • 感谢您的回复!解开了很多疑惑。虽然我的问题是这个 - 我想在问题页面之后立即进入 PythonQuestion 页面。而不是回到管理索引页面并再次从那里开始。我希望你能得到我。
  • 因为您使用的是继承,所以您永远不会单独进入问题页面,因为它拥有的所有内容(标题、文本、答案)都会在使用管理员时显示在 PythonQuestion 页面中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
相关资源
最近更新 更多