Я пытаюсь реализовать тегирование для профилей, чтобы вы могли добавить свои хобби, например. Я выбрал django -tag git, так как он казался довольно простым и делает то, что мне нужно, плюс не знаю, как сделать это самому с нуля. Мне удалось заставить его работать до некоторой степени, но у меня есть проблемы с 3 вещами:
- Не совсем уверен, каков наилучший способ управления полем формы для этих тегов, так как я генерирую форму автоматически с корректировки виджета в мета-функции формы, но она может работать нормально после решения двух следующих проблем:
- Когда нет данных для хобби (тегов) поля, оно заполняется одним тегом значения " [] "согласно изображению ниже.
Когда я добавляю тег «musi c» и отправляю форму после перезагрузки страницы, я получаю это «[]» в соответствии с изображением. Я предполагал, что это будет решено библиотекой, но я не вижу другого подобного сценария онлайн.
Когда я пытаюсь добавить другой тег «игр» и сохраните и перезагрузите, ниже происходит. Начальное значение снова переносится.
Моя модель:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
hobbies = TaggableManager()
Моя форма:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['hobbies',]
def __init__(self, *args, **kwargs):
super(UserProfileForm, self).__init__(*args,**kwargs)
self.fields['hobbies'].widget = forms.TextInput()
self.fields['hobbies'].widget.attrs['data-role'] = "tagsinput"
self.fields['hobbies'].widget.attrs['class'] = "form-control"
self.fields['hobbies'].required = False
Моя функция просмотра:
if request.method == 'POST':
user_profile = UserProfile.objects.get(user=request.user)
form = UserProfileForm(request.POST, instance=user_profile)
print(form)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
print("Form valid")
form.save_m2m()
Использование:
<script src="/static/js/tagsinput.js"></script>
<link rel="stylesheet" href="{% static 'css/tagsinput.css' %}" />