Это мое мнение. Я хочу добавить поле многозначности через текст, а не флажок, чтобы я мог создавать новые и получать старые. Я хочу, чтобы пользователь просто разделял каждый язык пробелом
class CreateBooksView(LoginRequiredMixin,CreateView):
login_url = "/books/login"
form_class = CreateBooksForm
template_name = "books/create.html"
success_url = reverse_lazy('home')
def form_valid(self,form):
tag_list=[]
books = form.save(commit=False)
books.author = self.request.user
tags = form.cleaned_data['language']
print(tags)
tag_list=[Language.objects.get_or_create(name=tag)[0] for tag in
tags.split()]
for tag in tag_list:
a = books.language.add(tag)
books.language = a
books.save()
return super(CreateBooksView,self).form_valid(form)
def form_invalid(self,form):
print (form.errors)
return super(CreateBooksView,self).form_invalid(form)
from django import forms
from books.models import Book
class CreateBooksForm(forms.ModelForm):
class Meta:
model = Book
fields = "name","about","language","image"
widgets = {
'language': forms.Textarea(attrs={'cols': 80, 'rows': 2}),
Это мои модели. Так что поле ManytoManyField, которое я хочу отфильтровать, - это язык.
class Language(models.Model):
name= models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
name=models.CharField(max_length=200)
about =models.TextField()
image = models.ImageField(upload_to=upload_image)
language = models.ManyToManyField(Language,related_name='book')
author = models.ForeignKey(User,on_delete=models.PROTECT,related_name='bauthor')
def __str__(self):
return self.name
class Meta:
ordering = ('-pk',)