TL; DR : я хочу сохранить внешний ключ с помощью класса CreateView - я могу получить группы пользователей для сохранения, но не мои собственные объекты модели.
Context : я пишу Django-приложение, которое работает с группами, сообщениями и пользователями.Записи публикации содержат внешний ключ как для группы, так и для пользователя (запись должна принадлежать группе и пользователю).Я хочу, чтобы пользователь мог добавлять сообщение в группу со страницы самой группы, т. Е. При доступе к форме CreateView для этого нового сообщения не должно быть поля «Группа».
Моя проблема : я хочу сохранить новый объект публикации с классом CreateView с закулисной вставкой группы (из слага) и пользователя (из self.request).user).Обычно для этого я использую метод form_valid (), и он отлично работает для вставки объекта User;однако я не могу понять, почему мой объект группы не будет сохранен.
Некоторая другая информация :
Я знаю, что могууспешно захватить объект группы из слизни в кваргах.Я назначил этот объект переменной self.form_group в методе get () и подтвердил, что «тип» объекта является правильным экземпляром класса моей группы.
IЯ попытался «получить» объект Group в самом методе form_valid (): все еще не повезло.
Я пробовал как закомментированные, так и некомментированные блоки кода в методе form_valid (),соответственно.
Модели :
class Post(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE, related_name = 'posts')
title = models.CharField(max_length = 100,default = '')
created_at = models.DateTimeField(auto_now = True)
post_text = models.TextField()
post_text_html = models.TextField(editable = False)
group = models.ForeignKey(Group, on_delete = models.CASCADE, related_name = 'posts', null = True, blank = True)
-
class Group(models.Model):
name = models.CharField(max_length = 255, unique = True)
slug = models.SlugField(allow_unicode = True, unique = True)
description = models.CharField(max_length = 5000, blank = True, default = '')
description_html = models.TextField(editable = False, blank = True, default = '') # Cannot be Edited
members = models.ManyToManyField(User, through = 'GroupMember')
Views.py
class CreatePostInGroup(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
model = Post
fields = ['title', 'post_text']
template_name = 'posts/post_in_group_form.html'
def get(self, request, *args, **kwargs):
print(self.kwargs)
print(type(self.request.user))
self.form_group = get_object_or_404(Group, slug=self.kwargs.get('slug'))
print(type(self.form_group))
return super(CreatePostInGroup, self).get(request, *args, **kwargs)
def form_valid(self, form):
form.instance.user = self.request.user
try:
form.instance.group = self.form_group
except:
return Http404
return super(CreatPostInGroup, self).form_valid(form)
def get_context_data(self, *args, **kwargs):
context = super(CreatePostInGroup, self).get_context_data(*args, **kwargs)
context['group'] = Group.objects.get(slug=self.kwargs.get('slug'))
return context
Спасибо за любую помощь, это сводит меня с ума!