2011-10-04 46 views
1

說我想要一個輸入表單,其中一個輸入是基於另一個表的多選。所以,我有以下代碼:Django多種選擇外鍵返回對象

# 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)。理想情況下,我希望選擇字段是這些對象的「標題」字段,並將它們的值作爲它們的ID。我在這裏錯過了什麼?

回答

1

如果我理解(要自定義的對象是如何出現在選擇框)你問什麼正確的,所有你需要做的就是添加一個__unicode__方法將mpType模型,如:

def __unicode__(self): 
    return self.title 

這樣Django就知道你想如何顯示這些項目。

+0

沒錯,就是這樣。謝謝。 –