2012-05-20 5 views
2

У меня есть ниже модели, для которых я пытаюсь создать форму для:Джанго форма со списком иностранных ключевых полей

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 для письма, и в той же форме введите несколько получателей по имени и рейтингу.

Может ли кто-нибудь помочь с созданием модели формы для этого? Я не могу понять, как создать django эту форму, используя {{ form.as_p }}. Я думаю, что мне нужно будет использовать jQuery для создания дополнительных строк получателей на странице HTML, но как мне получить django для синтаксического анализа их в модели?

Любая помощь была бы принята с благодарностью.

Спасибо. Ark

ответ

6

Ark, вы можете использовать ModelMultipleChoiceField в форме Django. Вот примерно пример. Я создаю "посты" приложения только для быстрого тестирования:

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 }} 
Смежные вопросы