2012-05-20 103 views
2

我有下面的模型,我想創建一個表單列表:Django的形式與外鍵的字段

class Letter(models.Model): 
    title = models.CharField(max_length=100) 
    publish_date = models.TimeField() 

class LetterRecipients(models.Model): 
    letter = models.ForeignKey(Letter) 
    recipient_name = models.CharField(max_length=200) 
    recipient_rating = models.IntegerField() 
    has_responded = models.BooleanField() 

我想一個表單,允許用戶輸入一個標題和publish_date,並以相同的形式通過名稱和評分輸入多個收件人。

任何人都可以使用與創建這種形式的模型幫助嗎?我無法弄清楚如何使用{{ form.as_p }} django生成此表單。我想我必須使用jQuery在HTML頁面上創建額外的收件人行,但是如何讓django將這些行分析到模型中?

任何幫助將不勝感激。

謝謝。 方舟

回答

6

方舟,你可以在Django的形式使用ModelMultipleChoiceField。這裏有一個大致的例子。我創建只是爲了快速測試 「的帖子」 的應用程序:

forms.py

from django import forms 
from django_test.posts.models import Letter, LetterRecipients 


class LetterForm(forms.Form): 
    title = forms.CharField() 
    publish_date = forms.TimeField() 
    recepient = forms.ModelMultipleChoiceField(
             queryset=LetterRecipients.objects.all() 
             ) 

models.py

from django.db import models 


class Letter(models.Model): 
    title = models.CharField(max_length=100) 
    publish_date = models.TimeField() 


class LetterRecipients(models.Model): 
    letter = models.ForeignKey(Letter) 
    recipient_name = models.CharField(max_length=200) 
    recipient_rating = models.IntegerField() 
    has_responded = models.BooleanField() 

    def __unicode__(self): 
     return self.recipient_name 

views.py

# Create your views here. 
from django_test.posts.forms import LetterForm 
from django.shortcuts import render 


def index(request): 
    form = LetterForm() 
    data = {'form': form} 

    return render(request, 'posts/index.html', data) 

的index.html

{% load url from future %} 

{{ form.as_p }}