@BobbyDjunk

Как в Django реализовать отключение поля в Админке по условию?

Есть такая модель:
class Smartphone(Product):

    diagonal = models.CharField(max_length=255, verbose_name='Диагональ')
    display_type = models.CharField(max_length=255, verbose_name='Тип дисплея')
    resolution = models.CharField(max_length=255, verbose_name='Разрешение экрана')
    accum_volume = models.CharField(max_length=255, verbose_name='Объем батареи')
    ram = models.CharField(max_length=255, verbose_name='Оперативная память')
    sd = models.BooleanField(default=True, verbose_name='Наличие слота для карты SD')
    sd_volume_max = models.CharField(max_length=255, null=True, blank=True, verbose_name='Максимальный объем SD карты')
    main_cam_mp = models.CharField(max_length=255, verbose_name='Главная камера')
    frontal_cam_mp = models.CharField(max_length=255, verbose_name='Фронтальная камера')

    def __str__(self):
        return f'{self.category.name} : {self.title}'

    def get_absolute_url(self):
        return get_product_url(self, 'product_detail')


и шаблон

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

{% block admin_change_form_document_ready %}
{{ block.super }}
<script>
const button = document.getElementById('id_sd')
button.addEventListener('click', function() {
    if (button.checked) {
        console.log('yes')
    } else {
        console.log('no')
    }
})
</script>
{% endblock %}


нужно:
Если НЕ стоит галочка на поле sd = models.BooleanField(default=True, verbose_name='Наличие слота для карты SD'),
то Не отображается поле sd_volume_max = models.CharField(max_length=255, null=True, blank=True, verbose_name='Максимальный объем SD карты')
Соответственно, если стоит галочка, то и второе поле активно
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
@borisalekseev
extra beginner junior python backend
А что написано в родительском шаблоне?
Если модель отправляется в шаблон, то можно обратиться к любому полю, если честно, не знаю можно ли подставлять переменные шаблона в теге скрипта, по крайне мере есть input type='hidden', из которого скриптом можно брать значение и отрисовывать то что надо. Звучит как костыльный способ, однако я js начал несколько дней назад изучать и в своей маленькой практике уже пользовался hidden инпутами, мне было удобно для начала.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы