2011-03-24 63 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