python - Django 管理面板:如果在下拉列表中选择了特定值,则显示/隐藏字段
问题描述
我究竟做错了什么?
在 django 管理面板中,我想根据选择下拉菜单显示/隐藏字段。此外,选择下拉列表位于父外键相关模型上,要显示/隐藏的字段位于子模型中或作为堆叠内联。
我遵循了这个解决方案(堆栈溢出),但没有成功。
模型.py
from django.db import models
CHOICES = (
('video', 'Video'),
('text', 'Text'),
('question', 'Question'),
)
class Section(models.Model):
content_type = models.CharField(max_length=32)
@property
def contents(self):
return self.content_set.all()
class Content(models.Model):
content = models.ForeignKey(Section, on_delete=models.DCASCADE)
video = models.FileField()
text = models.TextField()
question = models.CharField(max_length=512)
管理员.py
from django.contrib import admin
from .models import Section, Content
from .forms import DropdownModelForm
class ContentInline(admin.StackedInline):
model = Content
fieldsets = (
(None, {
'fields': (('video',),),
'classes': ('vid',)
}),
(None, {
'fields': (('text',),),
'classes': ('txt',)
}),
(None, {
'fields': (('question',),),
'classes': ('ques',)
})
)
class Media:
js = ('one/js/base.js',)
@admin.register(Section)
class SectionAdmin(admin.ModelAdmin):
form = DropdownModelForm
inlines = (ContentInline,)
表格.py
from django import forms
from .models import Section, CHOICES
class DropdownModelForm(forms.ModelForm):
class Meta:
model = Section
fields = ('content_type',)
widgets = {
'content_type': forms.Select(choices=CHOICES)
}
base.js
(function($) {
$(function() {
var selectField = $('#id_content_type'),
verified_1 = $('.vid'),
verified_2 = $('.txt'),
verified_3 = $('.ques');
function toggleVerified(value) {
if (value === 'video') {
verified_1.show();
verified_2.hide();
verified_3.hide();
} else if (value === 'text') {
verified_1.hide();
verified_2.show();
verified_3.hide();
} else if (value === 'question') {
verified_1.hide();
verified_2.hide();
verified_3.show();
}
}
// show/hide on load based on pervious value of selectField
toggleVerified(selectField.val());
// show/hide on change
selectField.change(function() {
toggleVerified($(this).val());
});
});
})(django.jQuery);
设置.py
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
.
.
.
INSTALLED_APPS = [
'one.apps.OneConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
.
.
.
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
再次,我做错了什么?
在 django 管理面板中,我想根据选择下拉菜单显示/隐藏字段。此外,选择下拉列表位于父外键相关模型上,要显示/隐藏的字段位于子模型中或作为堆叠内联。
我遵循了这个解决方案(堆栈溢出),但没有成功。
非常感谢您花费宝贵的时间并查看我糟糕的代码
解决方案
将javascript文件作为列表传递admin.py
解决了这个问题。
class Media:
js = ["one/js/base.js",]
另外,不知道为什么 jquery 不能正常工作。因此,为此将您的javascript包装在里面jQuery(document).ready(function ($) { ...your javascript... });
,如
jQuery(document).ready(function ($) {
(function ($) {
$(function () {
var selectField = $('#id_content_type'),
verified_1 = $('.vid'),
verified_2 = $('.txt'),
verified_3 = $('.ques');
function toggleVerified(value) {
if (value === 'video') {
verified_1.show();
verified_2.hide();
verified_3.hide();
} else if (value === 'text') {
verified_1.hide();
verified_2.show();
verified_3.hide();
} else if (value === 'question') {
verified_1.hide();
verified_2.hide();
verified_3.show();
}
}
// show/hide on load based on pervious value of selectField
toggleVerified(selectField.val());
// show/hide on change
selectField.change(function () {
toggleVerified($(this).val());
});
});
})(django.jQuery);
});
推荐阅读
- python - 在 ImageDataGenerator 中添加自定义预处理函数以进行高斯模糊
- python - 在 python 中构建区分大小写的字典
- spring-data-jpa - JPA Crud存储库查询方法不起作用
- javascript - 我无法使用 GridFS 从 mongodb 下载数据的问题是什么?
- sql - SQL Server 2019 中日期时间的可选字段?
- javascript - 有人可以帮助我吗?在 React 中找不到问题
- python - 将多列数据框转换为多索引
- botframework - MS Teams:我们应该如何判断活动事件是否来自机器人?
- reactjs - 使用 React Hooks 在表格中实现显示更多按钮
- apache-flink - 在 Apache Flink 中处理数据后内存没有下降