Django的ModelChoiceField返回索引。希望获取该位置上的对象。

11 浏览
0 Comments

Django的ModelChoiceField返回索引。希望获取该位置上的对象。

我有一个网页,您可以在其中将新的计算机/ IP添加到数据库中,或者从下拉列表中选择之前添加的项目。一切正常,只是在用户从列表中选择项目后,我得到的是它的索引,而不是它的名称。\n我该如何获取名称?我试图像这里所示那样将查询集作为向量访问,但是我得到了一个TypeError错误。\nviews.py:\n

d = DropDownList(request.POST or None)
    if d.is_valid():
        c = request.POST.get('current')
        return HttpResponse(d.qs[c-1])

\nmodels.py:\n

class DropDownList(forms.Form):
    qs = Computer.objects.all().order_by('name')
    current = forms.ModelChoiceField(qs, widget=forms.Select(attrs={"onChange":'submit()'}))    
class Computer(models.Model):
    name = models.CharField(max_length=200, default='')
    ip = models.CharField(max_length=200, default='')
    def __unicode__(self):
        return self.name

\nhome.html:\n

{{ current }}

0
0 Comments

问题的出现原因是在视图中,开发者从POST请求中直接获取数据,而不是从表单中获取数据。这样做的问题是,表单可以处理验证和数据转换,而直接从POST请求中获取数据可能导致数据类型不正确或不完整。

解决方法是使用表单对象的cleaned_data属性来获取经过验证和转换的数据。在这个特定的问题中,可以通过以下方式解决:

if d.is_valid():
    c = d.cleaned_data['current']

这样,通过cleaned_data属性获取到的c变量将是经过验证和转换的数据,可以直接使用。这种方式能够确保数据的完整性和正确性,避免因直接从POST请求中获取数据而导致的问题。

0