繁体   English   中英

如何停止适用于Python / Django / Javascript的递归GET?

[英]How Do I Stop Recursive GET For Python/Django/Javascript?

我已经花了最后两天的时间来试图解决这个问题的答案... ModelChoiceField int()的无效文字基数为10:''

利用此解决方案, 如果它为空如何防止提交HTML表单的输入字段值,我真的很关闭。

问题是...我正在使用django DetailView并覆盖GET来尝试获取Javascript传递的值,但是当我执行GET时,它实际上是循环的。 我是Java的新手,我的Javascript程序很可能不正确。 这是我的代码。

我的Django FormView ...

class AuthorByNameView(LoginRequiredMixin,FormView):
    form_class = AuthorByNameForm
    template_name = 'author_by_name.html'

    def get_form_kwargs(self):
        kwargs = super(AuthorByNameView, self).get_form_kwargs()
        kwargs['dropdown'] = self.request.GET.get("dropdown")
        return kwargs

我的Django DetailView ...

class AuthorDetailView(LoginRequiredMixin,DetailView):
    model = Author
    template_name = 'author_detail.html'

    def get_object(self, queryset=None):
        return get_object_or_404(Author, id=self.request.GET.get("dropdown"))

def get(self, request, *args, **kwargs):
    dropdown=self.request.GET.get("dropdown")
    if dropdown is not None:
        if Author.objects.filter(Q(id=self.request.GET.get("dropdown"))).distinct():
            self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)
    else:
        print(dropdown)
        messages.add_message(self.request, messages.INFO, 'Please enter a valid request number.')
        return HttpResponseRedirect(reverse('Main:author_detail'))

我的HTML ...

<form method="GET" autocomplete=off action="{% url 'Main:author_detail' %}">

我的表格...

class AssociateByNameForm(forms.Form):

dropdown = forms.ModelChoiceField(queryset=User.objects.none(),required=False)

def __init__(self, *args, **kwargs):
    dropdown = kwargs.pop('dropdown', None)
    super(AssociateByNameForm, self).__init__(*args, **kwargs)
    self.fields['dropdown'].widget.attrs['class'] = 'choices'
    self.fields['dropdown'].empty_label = ''
    self.fields['dropdown'].queryset = Author.objects.filter(is_active=True).order_by('last_name','first_name')
    self.fields['dropdown'].label_from_instance = lambda obj: "%s" % obj.get_full_name()

我的Javascript ...

$(document).ready(function () {
  $('form').submit(function() {
    var dropdown = $('#id_dropdown').val();
    if (dropdown === undefined || dropdown === "") {
      $('#id_dropdown').attr('name', '' );
    }
  });
});

从我的打印语句可以看出...。当调用detailview时,Javascript将递归将NONE的值发送到GET请求。 然后,Python后端被我在GET方法中定义的错误消息所覆盖。

是否有某种方法可以更正此问题,以便GET方法仅一次获得NONE的值? 如果用户单击“表单”上的“提交”,我试图通过我的DetailView返回错误消息。 我在许多其他地方都使用了相同的代码,并且效果很好。 区别在于,在这种情况下,我使用的是ModelChoiceField,并且如果用户单击表单并且该值为空白,则必须操纵该值。 我正在尝试发送NONE的值以防止无效的文字BASE10消息。

我对其他方法持开放态度,但是似乎如果我可以阻止request.GET.get接收或Javascript发送NONE多次,则此代码将完全满足我的要求。 我怀疑Javascript代码可能缺少回报? 我只是一个猜测,因为我对Javasript很陌生。

预先感谢您的任何想法。

我在这里返回了错误的URL ...

else:
    print(dropdown)
    messages.add_message(self.request, messages.INFO, 'Please enter a valid request number.')
    return HttpResponseRedirect(reverse('Main:author_detail'))

一旦我更正了URL,递归就停止了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM