Получение объекта 'QuerySet' без атрибута 'append' при создании функции, автоматически добавляющей определенное значение из поля ManyToManyField в Django

Я создаю словарь, и одной из функций является обнаружение любых входных данных, которые похожи в модели Censorships. Это делается для того, чтобы дать метку для вульгарных слов.

Это моя модель Word, тег также находится в том же файле, model.py. `class Word(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE)

# Attributes of the model
word = models.CharField(max_length=120)

# Tags for searching and label
tags = models.ManyToManyField('Tag', blank=True, related_name="word_tag")

class Tag(models.Model): name = models.CharField(max_length=50)`

Мой файл forms.py выглядит следующим образом, он содержит формы для модели слов и тегов. `class RawWordForm(forms.Form): word = forms.CharField(widget=forms.TextInput(attrs={"placeholder": "Введите слово"}))

tags = forms.ModelMultipleChoiceField(
    queryset=Tag.objects.all(),
    widget=forms.CheckboxSelectMultiple
    )

user = forms.ModelChoiceField(queryset=User.objects.all(), widget=forms.HiddenInput)

class RawTagForm(forms.Form): name = forms.CharField(widget=forms.TextInput(attrs={"placeholder": "Введите тег"}))`

Теперь цензура происходит в views.py, где будет вводиться слово. Я сделал так, чтобы сначала сохранялось слово, а затем устанавливались теги, потому что ModelMultipleChoiceField не позволяет получать теги через clean_data. из .forms import RawWordForm, RawTagForm from .models import Word, Tag from database.models import Censorship

def word_create(request): form = RawWordForm()

if request.method == "POST":
    form_data = {
        'word': request.POST.get('word'),
        'tags': request.POST.getlist('tags'),
        'user': request.user,
    }

    form = RawWordForm(form_data)
    if form.is_valid():        
        # Word save 
        w = Word(
            word = form.cleaned_data['word'],
            user = form.cleaned_data['user'],
        )

        w.save()
        tags = form.cleaned_data['tags'],
        w.tags.set(request.POST.getlist('tags'))
        
        wrd = w.cleaned_data['word']
        censored_words = Censorship.objects.values_list('name', flat=True)

        # Word censorship checks
        for cword in censored_words:
            if censor_word(wrd, cword):
                tag_selected = Tag.objects.get(name='Vulgar')
                form.cleaned_data['tags'].append(tag_selected)
                break
        return redirect('home')
    else:
        print(form.cleaned_data)
        print(form.errors)

context = {
    'form': form,
}
return render(request, "word/word_form.html", context)`

Я пробовал использовать append, чтобы убедиться, что тег vulgar к новым входам, которые считаются вульгарным словом, должен быть выбран. Но все, что я получаю, это ошибку, которая гласит "'QuerySet' object has no attribute 'append'"

TL;DR если слово находится в цензуре, то оно автоматически выберет тег vulgar вместе с тем, что выбрал пользователь.

Вернуться на верх