0

视图.py

def search(request):
    reportlist = []
    loc_id = request.POST.get('location')
    if loc_id:
        location_list = ReportLocation.objects.filter(title=loc_id)
        for locaton in location_list:                       
            reportlist.append(locaton.report)

表格.py

class SearchFilterForm(Form):
    location = forms.ChoiceField(widget=forms.Select(), choices='',required=False, initial='Your name')

    def __init__(self,user_id, *args, **kwargs):
        super(SearchFilterForm, self).__init__(*args, **kwargs)
        self.fields['location'] = forms.ChoiceField(choices=[('','All Location types')]+[(loc.id, str(loc.title)) for loc in Location.objects.filter(user=user_id).exclude(parent_location_id=None)])

模型.py

class ReportLocation(models.Model):   
    report = models.ForeignKey(Report)    
    title = models.CharField('Location', max_length=200)

如何使用所选选项过滤 ReportLocation 字段中的标题字段。我尝试在 views.py 中使用上述过滤器查询,但未显示任何过滤数据。需要帮助

4

1 回答 1

1

您的表单使用位置 ID 作为其值键,而不是位置标题。ChoiceFields 在选择中使用每个元组的第一部分作为发布的值,每个元组的第二部分只是用户看到的选项的名称。添加一个打印语句来检查你的价值,loc_id你会明白我的意思。

因此,您需要在 中查找位置 ID 的位置标题request.POST。如果您的 ReportLocation 模型有一个 ForeignKey to Location 您可以执行类似的操作

location_list = ReportLocation.objects.filter(location__id=loc_id)

但如果这不适用于您的架构,您可能必须将标题作为单独的查询查找。这是一个简单的例子:

def search(request):
    reportlist = []
    loc_id = request.POST.get('location')
    if loc_id:
        # This will cause an error if loc_id isn't found,
        # it's just here as an example
        loc_title = Location.objects.get(id=loc_id).title
        location_list = ReportLocation.objects.filter(title=loc_title)
        for locaton in location_list:                       
            reportlist.append(locaton.report)
于 2013-08-17T00:29:22.633 回答