2012-05-20 101 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 }}