根据外键选择在django-admin中填充值 [英] Populating values in django-admin based on a foreign key selection
问题描述
我有一个外键引用的模型看起来像这样
I have a model with a foreign key reference that looks something like this
class Plan(models.Model):
template = models.ForeignKey(PlanTemplate)
throttle = models.IntegerField(default=10)
rate_limit = models.BigIntegerField(default=60)
和外键模型:
class PlanTemplate(models.Model):
name = models.CharField(max_length=50)
throttle = models.IntegerField(default=10)
rate_limit = models.BigIntegerField(default=60)
我希望在PlanTemplate是PlanTemplate是自动填充计划管理页面上的油门和rate_limit选择。这是一个django-admin可以轻松做到这一点吗,或者我必须覆盖管理模板并添加一些自定义javascript?
I'd like to have the throttle and rate_limit on the Plan admin page be auto-populated when a PlanTemplate is selected. Is this something django-admin can easily be made to do, or do I have to override the admin template and add some custom javascript?
我正在运行Django 1.2.4
I am running Django 1.2.4.
推荐答案
我找到了一种方法来做到这一点,但它不得不涉及到JavaScript,这实际上很简单。我在templates / admin / billing /目录中创建了一个change_form.html,看起来像这样。
I found a way to do this, but it had to involve javascript, which was actually pretty straight forward. I created a change_form.html in the templates/admin/billing/ directory which looked like this.
{% extends "admin/change_form.html" %}
{% block extrahead %}
<script src="{{MEDIA_URL}}js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#id_template').change(function() {
$.ajax({
type: 'POST',
url: "{% url get_template_info %}",
data: {'template_id': $('#id_template').val()},
success: function(data, _status) {
$('#id_throttle').val(data.throttle);
$('#id_rate_limit').val(data.rate_limit);
$('#id_product').val(data.product);
$('#id_tier_group').val(data.tier_group);
},
dataType: "json"
});
});
});
</script>
{% endblock %}
这个视图只是将id传入,查询并将其返回给该呼叫。像一个魅力一样。
which hits a view that simply takes the id passed in, queries it up and returns it to the call. Works like a charm.
这篇关于根据外键选择在django-admin中填充值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!