[英]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.