2014-09-16 6 views
1

В моей форме я хочу заполнить ModelChoiceField данными из двух моделей.Как заполнить ModelChoiceField из двух моделей

Как я могу изменить Querryset, что он содержит объекты двух разных моделей?

Мой подход заключался в том, чтобы упаковать querrysets в список. Но это не кажется правильным контейнером для данных.

ответ

2

Я не думаю, что вы можете использовать ModelChoiceField с двумя разными моделями, потому что у вас не может быть набора запросов, состоящего из двух разных моделей.

Лучше попробуйте использовать ChoiceField, который принимает параметр выбора со списком кортежей.

Скажем, у вас есть две модели в models.py, как это:

from django.db import models 

class Model1(models.Model): 
    name = models.CharField(max_length=20, primary_key=True) 
    description = models.CharField(max_length=200) 

class Model2(models.Model): 
    name = models.CharField(max_length=20, primary_key=True) 
    description = models.CharField(max_length=200) 

Вы можете создать форму, как это в forms.py:

from django import forms 

from .models import Model1, Model2 

class MultipleModelChoiceForm(forms.Form): 
    select = forms.ChoiceField(choices=[]) 

    def __init__(self, *args, **kwargs): 
     super(MultipleModelChoiceForm, self).__init__(*args, **kwargs) 
     choices = [] 
     for obj1 in Model1.objects.all(): 
      choices.append((obj1.name, obj1.description)) 
     for obj2 in Model2.objects.all(): 
      choices.append((obj2.name, obj2.description)) 
     self.fields['select'].choices = choices 

Обратите внимание, что выбор определяется в __init__ формы, чтобы поле выбора было обновлено со всеми записями в Model1 и Model2 при создании экземпляра формы.

+0

Это работает - вид. Если я добавлю еще один элемент в модель, выбор не будет обновляться, только когда я перезапущу сервер, новые поля будут заполнены в поле. –

+0

См. Мое редактирование с кодом для обработки этого – baxeico

Смежные вопросы