Django ajax形式,choicefields依赖 [英] Django ajax form, choicefields dependancy

查看:93
本文介绍了Django ajax形式,choicefields依赖的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

models.py



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

类类型(models.Model):
name = models.Charfield()

class ReadBook .Model):
genre = models.ForeignKey(类型)
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 =submitvalue =Submit/>
< / form>

目的:
默认情况下仅显示访问者一场 - 流派。当他完成这个选择 - 显示与所选类型相关的书籍模型中的其他领域。

解决方案

inside form tag: / p>

  {{form.genre}} 
< div id =books>< / div>
< input type =submitvalue =Submitdisabled =yes/>

然后在javascript(jQuery是伟大的这个东西):

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

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


  def get_genre_books(request):
genre = get_object_or_404(pk = request.GET.get('genre',None))
#在这里渲染一个模板或者某些东西,这些书是多个选择器)
resp =,.join(genre.book_set.values_list('title',flat = True))
返回HttpResponse(resp)

当然这个视图添加到urls.py。 >

许多解决方案之一:)没有'测试(只写在这里,所以也许在某处的小错误):)


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)

Also I have one 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>

The purpose: By default to show a visitor only one field - genre. When he is with done this choice - show other fields from books model, related to selected genre.

解决方案

inside form tag:

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

then in javascript (jQuery is great for this stuff):

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

you must create a view that will return a html that should be placed in this div:

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)

and of course add this view to the urls.py.

One of many solutions :) didnt' test it (written only here, so maybe small bugs somewhere) :)

这篇关于Django ajax形式,choicefields依赖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆