在Django的下拉列表中显示值

时间:2017-11-09 21:50:18

标签: django django-forms django-templates

我想在我的Django应用程序中添加有关我设施不同部分的文档。 所以,我的models.py中有以下模型:

class Parts(models.Model):
   Name = models.CharField(max_length=50)
class Docs(models.Model):
   Date = models.DateField(default=date.today)
   Type = models.CharField(max_length=50)
   Part = models.ForeignKey(Parts)
   Link = models.FileField(upload_to='Docs/%Y/%m/%d')

forms.py:

class DocsForm(ModelForm):
    class Meta:
        model = Docs
        fields = ['Date', 'Type', 'Part', 'Link']
class PartsForm(ModelForm):
    class Meta:
        model = Parts
        fields = ['Name']

views.py:

def adddocs(request):
if request.method == 'POST':
    f = DocsForm(request.POST, request.FILES)
    if f.is_valid():
        f.save()
    return HttpResponseRedirect('')
else:
    form = DocsForm() 
return render(
    request,
    'adddocs.html',
    {'form': form}

以及我模板中的以下片段:

 <form action="{% url 'adddocs' %}" method="post" enctype="multipart/form-data">
           {% csrf_token %}
            <p> {{form.Date}}  </p>
            <p> {{form.Type}}  </p>
            <p> {{form.Part}}  </p>
            <p> {{form.Link}}  </p>

            <p><input type="submit" value="Add" /></p>
                </form>

除了一个问题,一切正常。现在我有两个部分,例如'管'和'存储'。但是如果我想在下拉列表中选择它们,我会在浏览器中看到以下变体:

零件对象
零件对象

我应该更改什么来查看此类部分的名称


 存储

1 个答案:

答案 0 :(得分:2)

您需要在模型中使用str()方法。

  

只要在对象上调用str(),就会调用 str ()方法。 Django在很多地方使用str(obj)。最值得注意的是,在Django管理站点中显示一个对象,并在显示一个对象时将值插入到模板中。因此,您应该始终从 str ()方法返回一个漂亮的,人类可读的模型表示。

class Parts(models.Model):
    Name = models.CharField(max_length=50)

    __str__(self):
        return self.Name