我想在我的详细信息url中使用弹格,但是当我想访问这样的url时:
本地主机:8000/电影-1
把这个错误寄给我
Value Error: invalid literal for int() with base 10: 'pelicula'这是我的模型:
from django.utils.text import slugify
class Movie(models.Model):
name = models.CharField(verbose_name='nombre', max_length=250)
@property
def slug(self):
return '{}'.format(slugify(self.name, allow_unicode=True))我的网址:
url(
regex=r'^(?P<slug>[\w-]+)/$',
view=views.DetailMovie.as_view(),
name='movie'
),最后,我认为:
class DetailMovie(DetailView):
model = Movie
pk_url_kwarg = "slug"
context_object_name = "movie"
template_name = "detail_movie.html"非常感谢你的帮助!
发布于 2017-08-23 18:57:46
你有两个问题:
pk_url_kwarg,默认情况下,detail视图将在视图参数上查找一个名为slug的参数,如果您更改了参数的名称,则使用slug_url_kwarg。slug字段,您正在定义一个属性,而不是一个字段,因此Django ORM不能对它进行查询,您正在使用该属性自动从模型的name字段创建弹格,这很酷,但您不能使用它来查询它的意义所在。更好的模式应该是这样的:
class Movie(models.Model):
name = models.CharField(verbose_name='nombre', max_length=250)
slug = models.SlugField(max_length=250)
def save(self, *args, **kwargs):
self.slug = slugify(self.name, allow_unicode=True)
return super(Movie, self).save(*args, **kwargs)这样,您就拥有了字段,并且该字段将在每次保存模型时自我更新,而且在此基础上,您的视图不需要任何额外的定制:
class DetailMovie(DetailView):
model = Movie
context_object_name = "movie"
template_name = "detail_movie.html"发布于 2017-08-23 18:57:39
这不管用。段塞必须是保存在模型上的实际字段,否则数据库将无法根据它的段塞查找项目。
https://stackoverflow.com/questions/45847278
复制相似问题