Django Dropdown从数据库填充

Eva*_*611 9 django django-templates django-views

如果我通过视图将项目传递给模板,并且我希望用户选择一个提交给用户记录的值,我只能在模板中使用for循环吗?

那会是什么样的?在模板中:

<form method="POST" 
<select>

</select>
</form>
Run Code Online (Sandbox Code Playgroud)

模型:

class UserItem(models.Model):
    user = models.ForeignKey(User)
    item = models.ForeignKey(Item)


class Item(models.Model):
    name = models.CharField(max_length = 50)
    condition = models.CharField(max_length = 50)
Run Code Online (Sandbox Code Playgroud)

视图:

def selectview(request):
   item  = Item.objects.filter()
   form = request.POST
   if form.is_valid():
      # SAVE 

   return render_to_response (
   'select/item.html',
    {'item':item},
    context_instance = RequestContext(request)
               )
Run Code Online (Sandbox Code Playgroud)

Cyr*_* N. 23

如果我理解你的需要,你可以这样做:

<form method="POST">
<select name="item_id">
{% for entry in items %}
    <option value="{{ entry.id }}">{{ entry.name }}</option>
{% endfor %}
</select>
</form>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你应该给名字项而不是项,因为它是一个集合(但它只是一个评论;)).

这样,您将获得数据库中所有项目的列表.

然后,在帖子中,这里你需要做什么:

def selectview(request):
   item  = Item.objects.all() # use filter() when you have sth to filter ;)
   form = request.POST # you seem to misinterpret the use of form from django and POST data. you should take a look at [Django with forms][1]
   # you can remove the preview assignment (form =request.POST)
   if request.method == 'POST':
      selected_item = get_object_or_404(Item, pk=request.POST.get('item_id'))
      # get the user you want (connect for example) in the var "user"
      user.item = selected_item
      user.save()

      # Then, do a redirect for example

   return render_to_response ('select/item.html', {'items':item}, context_instance =  RequestContext(request),)
Run Code Online (Sandbox Code Playgroud)

当然,不要忘记包含get_object_or_404