python - 无法将 slug 传递给 UpdateView 以获取正确的数据

标签 python django django-views slug django-generic-views

我试图允许用户使用 UpdateView 编辑输入到其项目中的信息。我不断收到错误消息“必须使用对象 pk 或 slug 调用通用详细信息 View UpdateProject”。我尝试指向 UpdateView 类中的 slug,但无法使其工作。我是 Django 新手,因此我们将不胜感激!

浏览次数

class CreateProject(CreateView):
    model = UserProject
    form_class = UserProjectForm
    template_name = 'howdidu/create_project.html'

    def form_valid(self, form):
        userproject = form.save(commit=False)
        form.instance.user = self.request.user
        userproject.save()
        self.object = userproject
        return super(CreateProject, 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 UpdateProject(UpdateView):
    model = UserProject
    form_class = UserProjectForm
    template_name = 'howdidu/update_project.html'
    slug_field = 'slug'

    def form_valid(self, form):
        userproject = form.save(commit=False)
        form.instance.user = self.request.user
        userproject.save()
        self.object = userproject
        return super(UpdateProject, 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})

网址

urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^register_profile/$', views.register_profile, name='register_profile'),
        url(r'^update_profile/$', views.update_profile, name='update_profile'),
        url(r'^create_project/$', login_required(views.CreateProject.as_view()), name='create_project'),
        url(r'^update_project/$', login_required(views.UpdateProject.as_view()), name='update_project'),
        url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
        url(r'^(?P<username>\w+)/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
        )

型号

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

最佳答案

Django的UpdateView默认需要来自相应url的pk或slug参数。在您的情况下,您需要将 UpdateProject View 的 url 更改为

url(r'^update_project/(?P<slug>[-\w]+)/$',
    login_required(views.UpdateProject.as_view()),
    name='update_project'),

其中 slug 是您项目的 slug。

关于python - 无法将 slug 传递给 UpdateView 以获取正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903757/

相关文章:

django - Django 1.8 中的 Django 表单向导去了哪里?

Django根据外键对字段求和

python - 在 Python 中使用 BeautifulSoup 从脚本标签中提取数据

Python 正则表达式 : trimming special characters

python - 为外键字段创建 post_save 信号

python - 如何让 pygtk 条目只接受 float ?

Django:更有效地从多对多关系中删除项目

python - Django View 使用 PyQt 将 URL 转换为 PDF

django cms 和响应式图像

Django 如何扩展通用 View 类