Я пытаюсь выполнить следующее в Django:
Приложение, которое позволяет пользователям создавать посты с изображениями. Они могут просматривать любые сообщения в системе и добавлять эти сообщения в свои закладки. Когда пользователь создает сообщение, оно автоматически добавляется в его закладки.
Модель
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
post_image = models.ImageField(max_length=255, upload_to='images/content/', blank=False, null=False)
author = models.ForeignKey(User, on_delete=models.PROTECT, related_name='authors')
tags = TaggableManager(through=UUIDTaggedItem, help_text=_('Maximum of 5 tags allowed'))
created = models.DateTimeField(auto_now_add=True)
bookmarks = models.ManyToManyField(User, related_name='bookmarked', blank=True)
bookmark_count = models.IntegerField(default=0)
def get_create_date(self):
return self.created.strftime("%B %Y")
ordering = ['-created']
Вид
@login_required
def post_add_view(request, *args, **kwargs):
context = {}
user = request.user
if request.method == 'POST':
form = PostAddForm(request.POST, request.FILES)
if form.is_valid():
new_post = form.save(commit=False)
new_post.author = user
new_post.save()
form.save_m2m()
context['form'] = form
messages.add_message(request, messages.SUCCESS, 'Image uploaded successfuly!')
return redirect('library:posts')
context['form'] = form
return render(request, 'library/post_add.html', context)
else:
form = PostAddForm()
context['form'] = form
return render(request, 'library/post_add.html', context)
Когда пользователь создает новую публикацию, эта публикация будет связана с дополнительным атрибутом в объекте публикации, который называется «закладки». Атрибут «закладки» имеет отношения «многие ко многим» с автором и публикацией.
Я могу легко создать объект сообщения, связать его с автором и сохранить в БД. Эта часть работает нормально. Часть, с которой я борюсь, - это то, как обрабатывать поле «закладки». Идентификатор автора прост, так как он у меня уже есть из сеанса с user = request.user
.
Каким-то образом мне нужно получить идентификатор вновь созданного сообщения, чтобы я мог прикрепить его к полю «закладки». Здесь я застрял. Я новичок в Django и программировании в целом.
Я видел несколько возможных способов справиться с этим, но я не уверен, что они правильные или целесообразные.
Сигналы Джанго
Я видел несколько сообщений в Интернете об использовании сигналов.
Джанго транзакции
В этом ТАК посте обсуждается использование транзакций
Нужно ли мне использовать один из вышеперечисленных методов или есть другой способ выполнить то, что я хочу? Спасибо!
Если я вас правильно понял, все, что вам нужно сделать, это добавить пользователя в поле закладок в файле new_post. Тем не менее, я думаю, что new_post нуждается в идентификаторе, чтобы это было возможно, хотя кто-то может меня поправить. Я имею в виду, что пользователя нужно добавить в закладки после того, как new_post будет сохранен (именно тогда new_post присваивается идентификатор). Итак, что-то вроде:
....
if form.is_valid():
new_post = form.save(commit=False)
new_post.author = user
new_post.save()
new_post.bookmarks.add(user)
form.save_m2m()
...