Django ajax形式,选择字段依赖

时间:2011-03-24 13:32:05

标签: django forms jquery django-forms

models.py

class Book(models.Model):
    title = models.CharField()
    genre = models.ManyToManyField(Genre)

class Genre(models.Model):
    name = models.Charfield()

class ReadBook(models.Model):
    genre = models.ForeignKey(Genre)
    books = models.ManyToManyField(Book)

我还有一个ModelForm:

class ReadBookForm(ModelForm):
    class Meta:
        model = ReadBook

template.html

<form action="/add_report/" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit" />
</form>

目的: 默认情况下,仅向访问者显示一个字段 - 流派。当他完成这个选择时 - 显示书籍模型中与选定类型相关的其他字段。

1 个答案:

答案 0 :(得分:2)

内部表格标签:

{{ form.genre }}
<div id="books"></div>
<input type="submit" value="Submit" disabled="yes" />

然后在javascript(jQuery非常适合这个东西):

$('#{{ form.genre.id }}').change(function(){
    $('#books').load('{% url get_genre_books %}', {genre: $(this).value()})
});

您必须创建一个视图,该视图将返回应放在此div中的html:

def get_genre_books(request):
    genre = get_object_or_404(pk=request.GET.get('genre', None))
    # here render a template or something that shouls be multiple selector of the books)
    resp = ", ".join(genre.book_set.values_list('title', flat=True))
    return HttpResponse(resp)

然后将此视图添加到urls.py。

许多解决方案中的一个:)没有'测试它(只在这里编写,所以可能是某处的小错误):)