【问题标题】:Django How to represent slug as ID for function based viewDjango 如何将 slug 表示为基于函数的视图的 ID
【发布时间】:2016-07-05 15:26:49
【问题描述】:

我正在学习 django,遇到了 slug,我在发送参数到基于函数的视图时感到震惊

我的 urls.py

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

Views.py

def detail(request, slug):
    post = Post.objects.get(id=slug)
    comments=post.comment_set.all()
    forms=CommentForm
    if request.method == 'POST':
        form=CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.title = post
            print comment
            comment.save()
        else:
          print form.errors
    else:
        form = PostForm()

模型.py

class Post(models.Model):
    title=models.CharField(max_length=200)
    description=models.TextField(max_length=10000)
    pub_date=models.DateTimeField(auto_now_add=True)
    slug = models.SlugField(max_length=40, unique=True)

    def __unicode__(self):
        return self.title

    def description_as_list(self):
        return self.description.split('\n')

    def get_absolute_url(self):
        return reverse('detail',kwargs={'slug':self.slug })

在views.py post = Post.objects.get(id=slug)第二行视图中,我觉得这是错误的表示,正确的做法是什么?

我得到以下代码的 错误

任何帮助都非常感谢..提前感谢

【问题讨论】:

  • 你能展示一下你的Post 模特吗?
  • @ParagTyagi-morpheus-..我已经通过添加 models.py 来编辑问题...请检查
  • 请检查我的回答。

标签: django django-urls slug


【解决方案1】:

错误表明Post 模型(django 自己创建)中的id 字段是AutoField(检查this)基本上是bigint 字段就sql而言。因此,在查询 id 字段时,它需要一个强制的 int 值,否则将是 raiseexception

在您的情况下,Post 模型应该有一个 slug 字段,如果它没有创建一个如下所示,

class Post(models.Model):
    ...
    ...
    slug = models.SlugField(max_length=100)
    ...
    ...

并将您的查询更新为,

post = Post.objects.get(slug=slug)

【讨论】:

    【解决方案2】:

    假设你的帖子模型有一个 slug 字段,你会想要这样做:

    post = Post.objects.get(slug=slug)
    

    可以翻译为:

    post = Post.objects.get(<name_of_field>=<argument_in_url>)
    

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2021-05-30
      • 2021-01-24
      • 2018-01-16
      • 2014-08-07
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 2018-12-29
      相关资源
      最近更新 更多