问题描述
我对 Django 比较陌生。我已经按照他们的教程尝试使用 django-autocomplete-light 几个小时,但我无法使其工作(基本上我什至无法从表单中搜索任何内容)。在那之后,我找到了这个线程,我决定试一试,因为它很简单,而且不需要安装任何应用程序,这似乎更可取 how to create a autocomplete input field in a form using Django
我的最终目标非常简单,为了能够开始对话,用户需要选择它属于哪个圈子。为此,我们允许用户在创建对话时通过开始输入来找到现有的“圈子”。完成所有步骤后,我可以在表单字段中输入单词,但实际上什么也没发生。我也尝试转到 URL 'circle_autocomplete' 但它说 视图conversation.views.circle_autocomplete 没有返回HttpResponse 对象。它返回 None 。 谁能告诉我下一步?
我也尝试过更改表单类型,但没有任何作用。 非常感谢。
models.py
class Circle(models.Model):
circle = models.CharField(max_length=60,null=True,blank=False,unique=True)
description = models.CharField(max_length=200,unique=False)
slug = models.SlugField(max_length=80,blank=True)
is_active = models.BooleanField(default=True)
created_date = models.DateTimeField(blank=True,auto_Now_add=True)
starter = models.ForeignKey(
'users.CustomUser',verbose_name='user',on_delete=models.SET_DEFAULT,default=1,related_name='Circle_Starter_User',)
def __str__(self):
return self.circle
class Conversation(models.Model):
conversation = models.CharField(max_length=60,unique=False)
detail = models.CharField(max_length=600,unique=False)
circle = models.ForeignKey( #circle - this is the higher level
Circle,on_delete=models.CASCADE,related_name='Parent_Circle',)
starter = models.ForeignKey(
'users.CustomUser',related_name='Conversation_Starter_User',)
conversation_type = models.CharField(choices=CONVERSATION_TYPE,null=False,max_length=140)
...
views.py
class StartConversationView(LoginrequiredMixin,View):
def get(self,request,*args,**kwargs):
form = StartConversationForm()
return render(request,'conversations/start.html',{'form': form})
def post(self,**kwargs):
form = StartConversationForm(request.POST)
if form.is_valid():
new_conversation = form.save(commit=False)
new_conversation.starter = request.user
new_conversation.save()
messages.success(request,('You have successfully started a new conversation.'))
return redirect(reverse('conversation_detail',kwargs={'slug':new_conversation.slug}))
return render(request,'conversation_detail',{'form': form})
def circle_autocomplete(request):
if request.GET.get('q'):
q = request.GET['q']
data = model.objects.using('legacy').filter(circle__startswith=q).values_list('circle',flat=True)
json = list(data)
return JsonResponse(json,safe=False)
else:
HttpResponse("No cookies")
urls.py
from .views import StartCircleView,StartConversationView,ConversationDetailView,CircleDetailView,CircleAutocompleteView,circle_autocomplete
from . import views
urlpatterns = [
path('start_conversation/',StartConversationView.as_view(),name='start_conversation'),path('circle_autocomplete/',views.circle_autocomplete,name='circle_autocomplete'),
forms.py
class StartConversationForm(forms.ModelForm):
circle = forms.CharField(required=True,widget=forms.TextInput(
attrs={
'style': 'width: 400px','class': 'basicAutoComplete','data-url': "/domain/circle_autocomplete/"
}))
class Meta:
model = Conversation
fields = ('conversation','detail','circle','conversation_type','contributor_access','verification_requirements','visibility','duration_unit','duration')
模板
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %}Home{% endblock title %}
{% load static %}
{% block script %}
<script src="https://cdn.rawgit.com/xcash/bootstrap-autocomplete/3de7ad37/dist/latest/bootstrap-autocomplete.js"></script>
<script>
$('.basicAutoComplete').autoComplete(
{minLength: 1}
);
$('.dropdown-menu').css({'top': 'auto','left': 'auto'})
</script>
{% endblock %}
{% block content %}
{% if user.is_authenticated %}
<h2>Start A Conversation</h2>
<form method="POST" class="padding">
{% csrf_token %}
{{form|crispy}}
<button class="btn btn-success" type="submit">Start Conversation</button>
</form>
{% else %}
<p>You are not logged in</p>
<a href="{% url 'login' %}">Log In</a> |
<a href="{% url 'signup' %}">Sign Up</a>
{% endif %}
{% endblock content %}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)