Django -tag git Ошибка получения и форматирования значения тега - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь реализовать тегирование для профилей, чтобы вы могли добавить свои хобби, например. Я выбрал django -tag git, так как он казался довольно простым и делает то, что мне нужно, плюс не знаю, как сделать это самому с нуля. Мне удалось заставить его работать до некоторой степени, но у меня есть проблемы с 3 вещами:

  1. Не совсем уверен, каков наилучший способ управления полем формы для этих тегов, так как я генерирую форму автоматически с корректировки виджета в мета-функции формы, но она может работать нормально после решения двух следующих проблем:
  2. Когда нет данных для хобби (тегов) поля, оно заполняется одним тегом значения " [] "согласно изображению ниже.

enter image description here

Когда я добавляю тег «musi c» и отправляю форму после перезагрузки страницы, я получаю это «[]» в соответствии с изображением. Я предполагал, что это будет решено библиотекой, но я не вижу другого подобного сценария онлайн.

enter image description here

Когда я пытаюсь добавить другой тег «игр» и сохраните и перезагрузите, ниже происходит. Начальное значение снова переносится.

enter image description here

Моя модель:

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' %}" />

1 Ответ

0 голосов
/ 24 марта 2020

Итак, после нескольких (сотен) тестов я наконец сузил суть проблемы и попытался go обойти ее с успешным результатом. Кажется, что данные были преобразованы в объекты тегов через библиотеку тегов ввода, которую я использовал. Только когда «data-роль» была указана как «tagsinput» в forms.py, данные уже перешли бы на сторону html в качестве этих объектов и отображались бы неправильно. Поэтому вместо этого я хотел сохранить данные в чистоте и применять только data-role = 'tagsinput' в конце для визуального аспекта, который я использовал:

var hobbiesTags = document.getElementById("id_hobbies");
  if(hobbiesTags){
  var att = document.createAttribute("data-role");
  att.value = "tagsinput";
  hobbiesTags.setAttributeNode(att);
  };

И это привело к следующему. Может быть, есть лучшие способы сделать это, я не уверен, но это довольно чистое решение. Поделитесь своими альтернативами.

enter image description here

...