Автозаполнение - многократное заполнение поля тега в форме Django
Привет!
Я хочу использовать tagfield, как показано здесь, в рамках фреймворка django: https://bootstrap-tagsinput.github.io/bootstrap-tagsinput/examples/
На данный момент я следую предложению использовать: taggit (https://django-taggit.readthedocs.io/en/latest/) и dal (https://django-autocomplete-light.readthedocs.io/en/master/) расширение.
Я хочу иметь поле multipinput, получающее теги из json-данных, позволяющее автозаполнение, использующее bootstrap дизайн.
За последние 5 дней я просто сошел с ума, чтобы заставить это нормально работать, тестируя различные подходы... !!!!grmxchl!!!!
Может ли кто-нибудь помочь мне и предложить принципиальное решение для этого.
Моя текущая реализация показывает объекты вместо значений и, более того, похоже, каким-то образом уничтожает значения в определенных случаях. Однако это выглядит как so. А должно выглядеть как so.
Мой код: Модель
class SrsReqs(models.Model):
uid_req = models.AutoField(db_column='uid_Req', primary_key=True) # Field name made lowercase.
req_title = models.TextField(db_column='Req_title', blank=True, null=True) # Field name made lowercase.
req_userstory = models.TextField(db_column='Req_userstory', blank=True, null=True) # Field name made lowercase.
req_tags = models.ManyToManyField(SrsTags)
req_issues = models.ManyToManyField(SrsWsIssues, related_name='req') # through='ReqIssues',
tags = TaggableManager()
class Meta:
db_table = 'SRS_Reqs'
ordering = ['uid_req']
def __str__(self):
return self.req_userstory
View
from django.shortcuts import render, get_object_or_404
from .models import SrsReqs
from taggit.models import Tag
from .forms import UpdateReq
class ModifyRequ(TemplateView):
template_name = 'requirements/change_req.html'
def __init__(self, *args, **kwargs):
super(ModifyRequ, self).__init__()
def get(self, request, *args, **kwargs):
# get handler, if page where called by GET request, e.g.: <form action="#" method="get">
qs = Tag.objects.all()
tag_list = [q.name for q in qs]
uid_req = kwargs['uid_req'] # variable coming from urls.py
requirement = get_object_or_404(SrsReqs, pk=uid_req) # get (whole) req from model
form = UpdateReq(request.POST or None, instance=requirement)
context = {'form': form, 'requirement': requirement, 'tag_list': tag_list, }
return render(request, self.template_name, context)
Форма
from .models import SrsReqs
from dal import autocomplete
from taggit.forms import *
class UpdateReq(autocomplete.FutureModelForm):
class Meta:
model = SrsReqs
fields = ('req_userstory', 'tags')
widgets = {
'tags': forms.TextInput(attrs={'data-role': 'tagsinput', 'id': 'tag-input', 'class': 'tagsinput'}),
'req_userstory': forms.Textarea(attrs={'class': 'textarea form-control auto-resize text-dark', 'rows': '4'})
}
def __init__(self, *args, **kwargs):
super(UpdateReq, self).__init__(*args, **kwargs)
# Making location required
self.fields['tags'].required = False
В конце результат должен быть похож на то, как это реализовано с помощью тегов @ stackoverflow.
Frank