Я хочу добавить теги для новых сообщений. Я использую ввод тегов начальной загрузки.
Это работает, только если я пишу tags_id, а не заголовок тега. И если я пишу новые номера, он сохраняет запись с новым тегом номера.
Как изменить tag_id на tag_title в таблице базы данных m2m или другим способом это исправить?
модель
class Tag(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
class Post(models.Model):
title = models.CharField(max_length=150, db_index=True)
slug = models.SlugField(max_length=150, blank=True, unique=True)
body = RichTextField()
date_pub = models.DateTimeField(auto_now_add=True)
tags = models.ManyToManyField(Tag, blank=True, related_name='posts')
author = models.ForeignKey(User, on_delete=models.CASCADE)
views = models.IntegerField(blank=True, default=0)
вид
def post(self, request):
tags = request.POST.getlist('tags')
for tag in tags:
objs, created = Tag.objects.get_or_create(title=tag, slug=tag)
bound_form = self.model_form(request.POST))
if bound_form.is_valid():
post = bound_form.save(commit=False)
post.author = request.user
post.save()
post.tags.add(objs)
post.save()
new_obj = bound_form.save()
return redirect(new_obj)
return render(request, self.template, context={'form': bound_form})
форма
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'slug', 'body', 'tags']
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'}),
'slug': forms.TextInput(attrs={'class': 'form-control'}),
'body': forms.Textarea(attrs={'class': 'form-control'}),
'tags': forms.SelectMultiple(attrs={'class': 'form-control', 'data-role': 'tagsinput'}),
}
exclude = ['author',]
Я хочу, чтобы теги были словами, а не идентификаторами. Теперь, когда я добавляю слова, отображается ошибка:
«qwe» не является допустимым значением.
Он хочет цифры и, возможно, исправить отображение всех тегов в select.
введите описание изображения здесь