【问题标题】:How to apply condition in django admin form?如何在 django 管理表单中应用条件?
【发布时间】:2013-08-14 13:45:12
【问题描述】:

我在 Django 中有这样的模型:

from django.db import models


class Navigation(models.Model):
    name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name


class Question(models.Model):
    question = models.TextField()
    publication_date = models.DateField()
    is_active = models.BooleanField(default=1)
    is_premium = models.BooleanField(default=0)

    def __unicode__(self):
        return self.question


class QuestionType(models.Model):
    question = models.OneToOneField(Question)
    question_types = (
                      (1, 'Multiple Choice'),
                      (2, 'Text Answer')
                      )
    type = models.IntegerField(choices=question_types, verbose_name="Select Question Type")


class Category(models.Model):
    question = models.OneToOneField(Question)
    navigation = models.OneToOneField(Navigation)
    choices_options = (
        (1, 'Begineer'),
        (2, 'Intermediate'),
        (3, 'Expert')
    )

    choices = models.IntegerField(choices=choices_options, verbose_name="Select level")


class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)


    def __unicode__(self):
        return self.choice_text

class Answer(models.Model):
    question = models.OneToOneField(Question)
    choice = models.OneToOneField(Choice)

我有这样的 admin.py:

from django.contrib import admin
from quiz.models import Navigation, Category, Question, Choice, Answer, QuestionType



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


class CategoryInline(admin.TabularInline):
    model = Category


class QuestionTypeInline(admin.TabularInline):
    model = QuestionType

class AnswerInline(admin.TabularInline):
    model = Answer

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
    (None,
    {'fields': ['question']}),
    ('Date information', {'fields': ['publication_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline, CategoryInline, AnswerInline, QuestionTypeInline]

    # Display two headings while displaying all the questions
    list_display = ('question', 'publication_date')

    # Add filter option
    list_filter = ['publication_date']

    # Add search capability
    search_fields = ['question']

    # Show the latest elements by default
    date_hierarchy = 'publication_date'




admin.site.register(Question, QuestionAdmin)
admin.site.register(Navigation)

会有两种类型的问题:Multiple Choice questions, text based questions. 因此,在创建问题时,如果用户选择多项选择问题,我想显示选项,如果用户选择基于文本的问题,则显示基于文本的一个输入。我该怎么做?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    所以在创建问题时,我想显示用户的选择 选择多项选择题并显示基于一个输入的文本,如果 用户选择基于文本的问题。我该怎么做?

    您需要一些 javascript,因为这是在创建过程中发生的。

    按照以下步骤操作:

    1. 在 QuestionAdmin 中更改创建模板
    2. 在这个新模板中添加一些 javascript 来隐藏这两个字段
    3. 添加 javascript 以根据选择显示适当的字段

    如果有人没有 javascript 工作,他们会看到这两个字段。

    如果您在这些步骤中遇到困难,请显示您的代码。

    【讨论】:

    • 是的,但是在 contrib/admin/templates/admin/ 中有很多可用的模板。我应该为此编辑哪个模板?您也可以向我指出一些有关此的教程。干杯
    • 我不确定,也许是 change_form.html 之一。这很容易测试。在 QuestionAdmin 类中写下:add_form_template = "admin/change_form.html"。如果管理页面没有改变,那很好。然后,将其替换为扩展“admin/change_form.html”的自定义模板...
    猜你喜欢
    • 2016-04-18
    • 2016-06-17
    • 2019-06-06
    • 2012-04-09
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2013-06-16
    相关资源
    最近更新 更多