我已经查看了SO中有关此问题的所有问题,但似乎没有人适合我的情况。
我有一个包含外键字段的搜索表单。这是模型:
class A(models.Model):
sa_datetime = models.DateTimeField(help_text='Start Date & Time')
b= models.ForeignKey('B', help_text='B')
class B(models.Model):
start_datetime = models.DateTimeField(help_text='Start Date & Time')
url= models.CharField(help_text='url', max_length=50)
这是搜索表单:
class SearchForm(forms.Form):
start_datetime = forms.DateField(
label=_("Start Date"),
required=False,
widget=customDateInput() )
url= forms.ModelMultipleChoiceField(
label=_("URL"),
required=False,
queryset=B.objects.filter(url__isnull=False).values_list('url',flat=True),
widget=forms.SelectMultiple(
attrs={
"class": "selectpicker form-control",
"data-live-search": "true"
}
)
)
这是我的view
:
class ASearchView(SearchView):
template_name = "aa/aa_list.html"
model = A
form_class = SearchForm
foreignFields = ["b"]
def get_queryset(self):
start_datetime = self.request.GET.get('start_datetime')
url = self.request.GET.get('url')
res= A.objects.select_related("b")
if url:
print 'heeeeeeeeeeeeereeeeee'
res= res.filter(b__url=url)
return res
我在模板中使用通用搜索表单,我只需要设置变量:
{% with 'A_list' as model_index_url %}
{% with 'B_search_view' as model_search_url %}
{% with item_count=paginator.count app_name='name_app' model_name='A' %}
{% include 'name_app/search_form_wrapper.html' %}
{% endwith %}
{% endwith %}
{% endwith %}
url
的值在多个选择字段中正确显示,但我检查了代码并且我已经找到了问题。这是由于所选选项的value
是url的名称,它必须是外键的id,以便它可以与外键对象匹配。
我不知道如何更正此问题,我不想为此案例创建新的搜索表单。我不想将__str__
函数更改为重新调整url
名称。
这是可能的还是我应该为这个案例写一个自定义表格? 提前谢谢。