2017-01-10 7 views
0

どのようにして、最小量の文字からなるランダムスラッグを生成することができますか? これで試してみます。Django - 最短ランダムスラッグを生成する

import random 
import string 

u_id = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)) 

とモデル私はモデルでこれを行うことができますどのように

class Articles(models.Model): 
    slug = models.CharField(max_length=6) 

?スラッグを生成し、使用可能かどうかをチェックして設定します。 私は短いスラッグの長さを1から6の文字にしたいと思っています。私にとっては最高の1文字のスラッグから始まります。

+0

ライブラリuuidの使用を検討しましたか?たとえばu_id = uuid.uuid4() – arlyon

+0

、さらにはUUIDFieldよりも優れています。 – arlyon

答えて

1

基本的なレベルでは、あなたがこれを行うことができます:上記

import random 
import string 

def rand_slug(): 
    return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(6)) 


class Articles(models.Model): 
    slug = models.CharField(max_length=6, unique=True, default=rand_slug()) 

は6文字の長さのランダムなスラグを生成します。あなたのモデルにunique=Trueを使用すると、他のArticleオブジェクトにそのスラッグがないことを確認します。

もっと進んだアプローチをしたい場合は、自分のcreateメソッドを書いてモデルマネージャーでこのスラッグを生成することをお勧めします。ランダムスラッグに動的なサイズの値や文字セットなどを付けることができます。

+1

djangoには、ユニークなスラグ?すでにデータベースに入っているものを意味します。 –

+0

また、rand_slugが非文字列を返す場合はどうなりますか?slug = models.UUIDField(default = uuid.uuid4、editable = False) – morsisko

関連する問題