Django множественный выбор объектов, возвращающих внешний ключ - PullRequest
1 голос
/ 05 октября 2011

Скажем, я хочу иметь форму ввода, где один из входов является множественным выбором на основе другой таблицы.Поэтому у меня есть следующий код:

# forms.py
class AddItemForm(ModelForm):
    class Meta:
        model = mpItem
        exclude = ('date_created',
                   'created_by_user',
                   )

и следующий вид:

def add_item_view(request, template_name='data/add_item.html', current_app=None):
    if request.method == 'POST':
        form = AddItemForm(request.POST, request.FILES)
        if form.is_valid(): 
            item = form.save(False)
            item.created_by_user = request.user
            item.save()
            return HttpResponseRedirect('../item/'+str(item.id)) 
    else:
        form = AddItemForm() 
        form.fields["mptype"].queryset = mpType.objects.all()

    return render_to_response(template_name,context_instance=RequestContext(request,{'form':form})
)

и шаблон:

  <form enctype="multipart/form-data" method="post" action=".">
  {{ form.non_field_errors }}
  <div class="fieldWrapper">
    {{ form.title.errors }}
    <label for="id_title" class="second">Title</label>
    {{ form.title }}    
  </div>
  <div class="fieldWrapper">
    {{ form.mptype.errors }}
    <label for="id_mptype" class="second">Type</label>
    {{ form.mptype }}
    <p>
      <span> Your item does not fit in any collection? Create a <a href="{% url addcollection %}">new one</a>.</span>
    </p>
  </div>
  <div class="fieldWrapper">
    {{ form.image.errors }}
    <label for="id_image" class="second">Image</label>
    {{ form.image }}    
  </div>
  <div class="fieldWrapper">
    {{ form.description.errors }}
    <label for="id_description" class="second">Description</label>
    {{ form.description }}    
  </div>

Однако, когда шаблон отображаетсяполучил список объектов, которые я не знаю, как распаковать (объект mpType1, объект mpType2).В идеале я хотел бы, чтобы поля выбора были полем заголовка этих объектов, а их значения - их идентификаторами.Что мне здесь не хватает?

1 Ответ

1 голос
/ 05 октября 2011

Если я правильно понимаю, что вы спрашиваете (вы хотите настроить отображение объектов в поле выбора), все, что вам нужно сделать, это добавить метод __unicode__ в модель mpType, например:

def __unicode__(self):
    return self.title 

, чтобы Django знал, как вы хотите, чтобы эти элементы отображались.

...