Я не могу решить, как получить правильный экземпляр для части form_valid моего общего представления. Я пытаюсь разрешить пользователю публиковать на стене проекта (как Facebook). Мне нужно, чтобы сообщение было связано с отдельным проектом (у пользователя может быть несколько проектов). Должен ли экземпляр быть pk или заголовок проекта? Любой пример кода или помощи будет очень оценен! Я борюсь с пониманием того, как при создании нового сообщения он знает, с каким проектом будет ассоциироваться.Нужна помощь в получении правильного экземпляра для form_valid в общем представлении
просмотров
class NewPost(CreateView):
model = ProjectPost
form_class = ProjectPostForm
template_name = 'howdidu/new_post.html'
def form_valid(self, form):
newpost = form.save(commit=False)
form.instance.user = self.request.user
newpost.save()
self.object = newpost
return super(NewPost, self).form_valid(form)
def get_success_url(self):
project_username = self.request.user.username
project_slug = self.object.slug
return reverse('user_project', kwargs={'username':project_username, 'slug': project_slug})
модели
class UserProject(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
project_overview = models.CharField(max_length=1000)
project_picture = models.ImageField(upload_to='project_images', blank=True)
date_created = models.DateTimeField(auto_now_add=True)
project_views = models.IntegerField(default=0)
project_likes = models.IntegerField(default=0)
project_followers = models.IntegerField(default=0)
slug = models.SlugField(max_length=100, unique=True) #should this be unique or not?
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(UserProject, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
class ProjectPost(models.Model):
project = models.ForeignKey(UserProject)
title = models.CharField(max_length=100)
post_overview = models.CharField(max_length=1000)
date_created = models.DateTimeField(auto_now_add=True)
post_views = models.IntegerField(default=0)
post_likes = models.IntegerField(default=0)
формы
#form to add project details
class UserProjectForm(forms.ModelForm):
class Meta:
model = UserProject
fields = ('title', 'project_picture', 'project_overview')
#form to create a post
class ProjectPostForm(forms.ModelForm):
class Meta:
model = ProjectPost
fields = ('title', 'post_overview')
Можете ли вы показать нам ProjectPostForm? Пользователь собирается выбрать проект (в форме)? – dkarchmer
@davka Я только что добавил формы для вас. Пользователь не выбирает проект в форме. Мне нужно, чтобы пользователь мог перейти на страницу своего проекта, нажмите ссылку «Создать новую запись», которая отобразит их в форме для сообщения. Затем сообщение должно быть сохранено и отображено на странице проекта, на которую они нажали ссылку. – ollysmall