Я пытаюсь создать функцию тега для сообщения с ManyToManyField в django. Если я добавляю теги через admin, они обновляются должным образом, но через форму createview не обновляются.
Ниже приведен код связанных классов в model.py
class Tag(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
class Post(models.Model) :
title = models.CharField(
max_length=200,
validators=[MinLengthValidator(2, "Title must be greater than 2 characters")]
)
picture = models.BinaryField(null=True, blank=True, editable=True)
content_type = models.CharField(max_length=256, null=True, blank=True, help_text='The MIMEType of the file')
text = models.TextField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) #foreign key from django setting
category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)
tags = models.ManyToManyField(Tag, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
# Shows up in the admin list
def __str__(self):
return self.title
И класс CreateView в view.py
class PostCreateView(LoginRequiredMixin, View):
template = 'cfis/post_form.html'
success_url = reverse_lazy('cfis:all')
def get(self, request, pk=None) :
form = PostCreateForm()
ctx = { 'form': form }
return render(request, self.template, ctx)
def post(self, request, pk=None) :
form = PostCreateForm(request.POST, request.FILES or None)
if not form.is_valid() :
ctx = {'form' : form}
return render(request, self.template, ctx)
# Add owner to the model before saving
pic = form.save(commit=False)
pic.owner = self.request.user
pic.save()
return redirect(self.success_url)
Lastyl, класс формы в form.py
class PostCreateForm(forms.ModelForm):
max_upload_limit = 2 * 1024 * 1024
max_upload_limit_text = naturalsize(max_upload_limit)
picture = forms.FileField(required=False, label='File to Upload <= '+max_upload_limit_text)
upload_field_name = 'picture'
class Meta:
model = Post
fields = ['title', 'text', 'category', 'tags']
# Validate the size of the picture
def clean(self) :
cleaned_data = super().clean()
pic = cleaned_data.get('picture')
if pic is None : return
if len(pic) > self.max_upload_limit:
self.add_error('picture', "File must be < "+self.max_upload_limit_text+" bytes")
# Convert uploaded File object to a picture
def save(self, commit=True) :
instance = super(PostCreateForm, self).save(commit=False)
if commit:
instance.save()
return instance
Может кто-нибудь, пожалуйста, сообщите мне, что мне не хватает? Странно, это работает через Admin, но не в форме пользователя.