Django: Как сделать одну форму из нескольких моделей, содержащих иностранные ключи - PullRequest
3 голосов
/ 17 июня 2010

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

Мой код ниже:

views:

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 в форму, чтобы она прошла проверку.У меня есть скрытое поле в шаблоне, мне просто нужно понять, как это сделать в представлениях

1 Ответ

5 голосов
/ 18 июня 2010

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

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...