2010-06-17 3 views
3

Я пытаюсь создать форму на одной странице, которая использует несколько моделей. Модели ссылаются друг на друга. У меня возникли проблемы с получением формы для проверки, потому что я не могу понять, как получить идентификатор двух моделей, используемых в форме, в форму для проверки. Я использовал скрытый ключ в шаблоне, но я не могу понять, как заставить его работать в воззренияхdjango: Как сделать одну форму из нескольких моделей, содержащих дополнительные ключи

Мой код ниже:

просмотров:

def the_view(request, a_id,): 

    if request.method == 'POST': 

    b_form= BForm(request.POST) 
    c_form =CForm(request.POST) 
    print "post" 
    if b_form.is_valid() and c_form.is_valid(): 
     print "valid" 
     b_form.save() 
     c_form.save() 
     return HttpResponseRedirect(reverse('myproj.pro.views.this_page')) 
    else: 
    b_form= BForm() 
    c_form = CForm() 
    b_ide = B.objects.get(pk=request.b_id) 
    id_of_a = A.objects.get(pk=a_id) 
    return render_to_response('myproj/a/c.html', 
{'b_form':b_form, 
'c_form':c_form, 
'id_of_a':id_of_a, 
    'b_id':b_ide  }) 

модели

class A(models.Model): 
    name = models.CharField(max_length=256, null=True, blank=True) 
    classe = models.CharField(max_length=256, null=True, blank=True) 

    def __str__(self): 
     return self.name 


class B(models.Model): 

    aid = models.ForeignKey(A, null=True, blank=True) 
    number = models.IntegerField(max_length=1000) 
    other_number = models.IntegerField(max_length=1000) 


class C(models.Model): 
    bid = models.ForeignKey(B, null=False, blank=False) 
    field_name = models.CharField(max_length=15) 
    field_value = models.CharField(max_length=256, null=True, blank=True) 

бланки

from mappamundi.mappa.models import A, B, C 


class BForm(forms.ModelForm): 
    class Meta: 
    model = B 
    exclude = ('aid',) 

class CForm(forms.ModelForm): 
    class Meta: 
    model = C 
    exclude = ('bid',) 

B имеет внешний ключ ссылку на A, C имеет внешний ключ ссылку на B. Поскольку модели связаны, я хочу иметь формы для них на одной странице, 1 кнопку отправки. Так как мне нужно заполнить поля для форм для B и C & Я не хочу выбирать идентификатор B из выпадающего списка, мне нужно как-то получить идентификатор формы B в форму, чтобы он подтвердил. У меня есть скрытое поле в шаблоне, мне просто нужно понять, как это сделать в представлениях

+0

Возможно, вы, возможно, объясните немного больше того, что именно вы пытаетесь достичь, какова намерение иметь две формы на странице? Вы хотите установить поля ForeignKey в соответствии со страницей, которую просматривает пользователь? –

ответ

5

Код у вас почти прав. Просто выполните:

if b_form.is_valid() and c_form.is_valid(): 
    print "valid" 
    b = b_form.save() 
    c = c_form.save(commit=False) 
    c.b = b 
    c.save()