2017-08-23 4 views
0

詳細URLのslugify使用:Djangoは:私は私の詳細のURLにナメクジを使用したいが、私は、このようなURLへのアクセスもしたいとき

はlocalhost: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:

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" 

おかげであなたの助けのためにたくさん!

答えて

2

は、次の2つの問題を抱えている:

    あなたはの名前を変更した場合
  • このためpk_url_kwargを使用しないでください、デフォルトのために、引数を探します詳細ビューは、ビューの引数にslug呼ば 引数は、slug_url_kwargを使用します。
  • モデルにslugフィールドがありません。プロパティを定義しています。これはフィールドではないため、Django ORMはそのプロパティを使用してクエリを実行できません。そのプロパティを使用して、モデルの名前フィールドであり、それはクールですが、それを照会に使うことはできません。あなたはフィールドを持ち、フィールド自体が、モデルが保存されるたびに更新されます、そしてその上に、あなたのビューはdoesnの

    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" 
1

これは機能しません。スラッグはモデルに保存された実際のフィールドである必要があります。そうでなければ、データベースがそのスラッグに基づいてアイテムをルックアップする方法はありません。

関連する問題