gpt4 book ai didi

Django 管理员 : populate the field based on previous field value

转载 作者:行者123 更新时间:2023-12-01 10:56:03 26 4
gpt4 key购买 nike

我在django admin中有一个模型如下

ChoiceA= (
("on-false","on-false"),
("on-true","on-true"),
)

ChoiceB = (
("always","always"),
("never","never"),
)
id = models.CharField(verbose_name="Field",max_length=32)
type = models.CharField(verbose_name="Expression",max_length=32)
action = models.CharField(max_length=32, choices=x)

现在基于用户输入的类型,即如果用户输入 type = "a",则操作的选择应设置为 ChoiceA,如果用户输入 type = "b",则操作的选择应设置为 ChoiceB。我怎样才能在 Django Admin 中实现这一点?

编辑:

action_change.js

jQuery(document).ready(function(){
$("#id_type").change( function(event) {
$.ajax({
"type" : "POST",
"url" : "/action_choices/",
"dataType" : "json",
"cache" : false,
"error" : alert("hello"),
"success" : function(json) {
$('#id_action >option').remove();
for(var j = 0; j < json.length; j++){
$('#id_action').append($('<option></option>').val(json[j][0]).html(json[j][1]));
}
}

});
});
});

最佳答案

您可以使用 Ajax 和 jQuery 实现它:

模型.py:

type   = models.CharField(verbose_name="Expression",max_length=32)
action = models.CharField(max_length=32, choices = (('', ''), ))

管理员.py:

class MyModelAdmin(admin.ModelAdmin):
list_display = ('type', )

class Media:
js = ['/static/js/action_change.js']

admin.site.register(MyModel, MyModelAdmin)

urls.py:

url(r'^action_choices/', 'myproject.myapp.views.action_choices'),

views.py:

def action_choices(request): 
action_list = []
ChoiceA = ("on-false", "on-true")
ChoiceB = ("always", "never")

action_type = request.GET.get('action_type')
if str(action_type).lower() == 'a':
choices = ChoiceA
elif str(action_type).lower() == 'b':
choices = ChoiceB
else:
choices = ()

[action_list.append((each,each)) for each in choices]
json = simplejson.dumps(action_list)
return HttpResponse(json, mimetype='application/javascript')

在静态文件夹中创建包含以下内容的文件 action_change.js,并在 ModelAdminclass Media 中定义正确的路径。

action_change.js

(function($){   
$(function(){
$(document).ready(function() {
$('#id_type').bind('keyup', type_change);
$('#id_action >option').show();
});
});
})(django.jQuery);

// based on the type, action will be loaded

var $ = django.jQuery.noConflict();

function type_change()
{
var action_type = $('#id_type').val();
$.ajax({
"type" : "GET",
"url" : "/action_choices/?action_type="+action_type,
"dataType" : "json",
"cache" : false,
"success" : function(json) {
$('#id_action >option').remove();
for(var j = 0; j < json.length; j++){
$('#id_action').append($('<option></option>').val(json[j][0]).html(json[j][1]));
}
}
})(jQuery);
}

这应该适用于您提出的方案。我在下面给出我的建议:

模型.py

type   = models.CharField(verbose_name="Expression",max_length=32, choices = (('a', 'a'), ('b', 'b'), ))
action = models.CharField(max_length=32, choices = (('', ''), ))

action_change.js(第 5 行)

$('#id_type').bind('change', type_change);

关于Django 管理员 : populate the field based on previous field value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com