Django Admin - Отключить поле по выбору - PullRequest
0 голосов
/ 15 октября 2019

У меня была модель, подобная этой

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 голосов
/ 15 октября 2019

Вы должны сделать это во внешнем интерфейсе своего проекта, используя 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

* 1017. * 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>/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...