'urlname'不是主键的有效值

时间:2017-10-18 09:46:27

标签: python django

我已经查看了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名称。

这是可能的还是我应该为这个案例写一个自定义表格? 提前谢谢。

0 个答案:

没有答案