2011-03-24 55 views
2

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:Django的AJAX形式,choicefields扶养

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> 

目的: 默认向访客展示只有一个字段 - 类型。当他完成这个选择时 - 显示书籍模型中与选定类型相关的其他领域。

回答

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()}) 
}); 

,你必须创建一个视图,将返回应放在这一个html 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) 

并且当然会将此视图添加到urls.py. “测试

一个多解:) didnt(只写在这里,也许小错误的地方):)

+0

谢谢Jerzyk!我有一个类似的问题,这是非常有用的:)我有点困惑'book_set'和'values_list'来自哪里。你介意多解释一下吗? – Parker 2011-07-10 04:05:43

+1

'book_set'查找相关的Book对象(参见[相关对象引用](https://docs.djangoproject.com/en/1.3/ref/models/relations/#related-objects-reference)) – LaundroMat 2011-07-10 06:41:37

+1

而'values_list'是返回元组而不是对象的QuerySet([请参阅QuerySet API文档中的values_list上的条目](https://docs.djangoproject.com/en/1.3/ref/models/querysets/#django.db.models。 query.QuerySet.values_list)) – LaundroMat 2011-07-10 06:49:14