(Post polls教程) Django admin: 添加新的相关模型类型后(free response, true/false, etc.),如何添加到Django admin

(Post polls tutorial) Django admin: After adding new related model type (free response, true/false, etc.), how to add to Django admin

我刚刚完成了 Django 投票教程。在本教程中,您实际上构建了一个多项选择题(具有相关选项的问题)。然后您配置管理员,这样您就可以获得这个非常好的 "ADD CHOICE" 按钮。 (到目前为止我喜欢 Django)

我想构建一个也有其他问题类型的测验应用程序,例如 free-response、true/false 等,并在称为测验的新模型下收集一系列不同的问题。我最终想在 Django 管理中获得一个按钮 "SELECT QUESTION TYPE",但我该怎么做呢?

这是我对模型的尝试:

(models.py)

class Quiz(models.Model):
    quiz_name = models.CharField

class Multiple_choice_question(models.Model):
    quiz = models.ForeignKey(Quiz)
    question_text = models.CharField    

class Free_response_question(models.Model):
    quiz = models.ForeignKey(Quiz)
    question_text = models.CharField

class Choice(models.Model):
    question = models.ForeignKey(Multiple_choice_question)
    choice_text = models.CharField

在我上面的模型中,Multiple_choice_question 和 Free_response_question 除了 Multiple_choice_question 有 children(选择)而 Free_response_question 没有,但我将创建许多不同的问题类型,具有 question_text 以外的许多不同属性:例如,我将有问题 with/without 图像,其他问题具有 "x-component" 和 "y-component" 用于绘制向量作为问题等,所以我不想对所有问题类型使用相同的模型,因为所有属性每次都会显示在管理员中。

我希望流程是:

登录管理员 ---> Select 测验,或单击 "ADD A NEW QUIZ" ---> 创建测验后,应该有一个按钮 "SELECT QUESTION TYPE" ---> 选择问题类型后,它应该填充该问题类型的属性,我将填写并保存(或添加其他问题类型)。

这是本教程留给我的 admin.py 代码...我将如何修改它以实现我想要的?

from django.contrib import admin
from .models import Choice, Question

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    list_filter = ['pub_date']
    search_fields = ['question_text']

admin.site.register(Question, QuestionAdmin)

这是我尝试对其进行编辑的尝试,但我还需要做什么?

from django.contrib import admin
from .models import Quiz, Multiple_choice_question, Free_response_question, Choice

class ChoiceInLine(admin.TabularInline):
    model = Choice    

class MultipleChoiceQuestionInLine(admin.TabularInline):
    model = Multiple_choice_question
    inlines = [ChoiceInLine]

class FreeResponseQuestionInLine(admin.TabularInline):
    model = Free_response_question

class QuizAdmin(admin.ModelAdmin):
    inlines = *Choice of* [MultipleChoiceQuestionInLine, FreeResponseQuestionInLine, etc.]

admin.site.register(FreeResponseQuestionInLine, FreeResponseQuestionInLine, Quiz, QuizAdmin)

提前致谢,欢迎任何其他建议!

哦,这可能是个大问题。

好的,按照你的问题,当你选择一些"Question Type"时,页面上会显示一些不同的属性。要解决此问题,您需要执行几个步骤。

  1. 使用AJAX, Javascript OR JQuery TECH从模板页面获取用户的选择,然后发送一个请求(post / get)到一个特殊的方法(例如,/admin/get_choice)
  2. 为此方法设置一个url(url(r'^/admin/get_choice/$', get_choice)).
  3. 在方法 get_choice 中,获取参数作为从数据库搜索结果的选项,然后 return 将结果返回到模板页面。
  4. 在模板页面,使用 AJAX、Javascript 或 JQuery TECH 在模板页面上显示结果。
  5. POST 一切都以一种方法将结果保存到数据库中。
  6. 完成。

希望能给大家一些建议。