Django Admin-通过选择禁用字段

时间:2019-10-15 17:39:29

标签: django django-admin

我有一个这样的模型

class Content(models.Model):
  name = Model.CharField(max_length=255, blank=False, null=False)
  type = Model.CharField(max_length=1, blank=False, null=False, choices=CONTENT_CHOICE)
  lesson = Model.CharField(max_length=255, blank=False, null=False)
  exam = Model.CharField(max_length=255, blank=False, null=False)

和CONTENT_CHOICE喜欢

CONTENT_CHOICE = (("1", "Lesson"), ("2", "Exam"))

我的目标是,当输入者从Admin插入此模型的新记录时,如果输入者选择“课程”,则字段exam将被禁用,反之亦然。您能告诉我该怎么做吗?我搜索了一些教程,但似乎都没有任何线索。谢谢。

1 个答案:

答案 0 :(得分:0)

您必须使用CSS和JavaScript在项目的前端进行此操作。

css

.field-exam {
    display: none; /* this will be the initial display value */
}

js

type = document.getElementById('id_type');
field-exam = document.querySelector('.field-exam');

type.onchange = () => {
    if ( type.value === '1' ){
        field-exam.style.display = 'none';
    else if ( type.value === '2' ){
        field-exam.style.display = 'block';
}

然后,要覆盖管理模板,您需要将其放入

<project_root>/<app_folder>/static/<app_folder>/

然后,在模板中,您必须导入新的CSS和js

change_form.html

{% extends "admin/change_form.html" %}
{% load static %}

{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" href="{% static '<app_name>/<css_file>'%}">
{% endblock %}

{% block admin_change_form_document_ready %}
{{ block.super }}
<script type="text/javascript" src="{% static '<app_name>/<js_file>' %}"></script>
{% endblock %}

将html文件保存在

<project_root>/<app_folder>/template/admin/<app_folder>/<model_name>/