2012-01-21 5 views
0

私は小さなWebサイトのホストサービスを構築しています。ユーザーはWebサイトを作成してページを挿入できます。Djangoを使ってリレーションシップにユニークなフィールドを設定するにはどうすればいいですか?

だから私は、次のクラスを作成しました:

class Website(models.Model): 
    account = models.CharField(max_length=30, unique=True) 
    custom_domain = models.CharField(max_length=130, blank=True, unique=True) #optional 
    title = models.CharField(max_length=80) 

class Page(models.Model): 
    website = models.ForeignKey(Website) 
    title = models.CharField(max_length=80) 
    slug = models.CharField(max_length=80, unique=True) 
    content = models.TextField() 

私はウェブサイトやページクラス間の関係にフィールド「スラグ」はユニークな作りたいです。このようにして、2つのサイトは同じスラッグを持つページを持つことができます。このように:

http://mysite.com/website_1/contact_page 
http://mysite.com/webiste_2/contact_page 

ただし、フィールドオプション 'unique'はそのためのものです。

このような場合のヒントやベストプラクティスはありますか?

答えて

1

スラグカラムの固有の要件を削除し、PageのMeta クラスにunique_togetherを追加します。

class Page(models.Model): 
    website = models.ForeignKey(Website) 
    title = models.CharField(max_length=80) 
    slug = models.CharField(max_length=80) 
    content = models.TextField() 

    class Meta: 
     unique_together = ('website', 'slug') 
+0

助けてくれてありがとう! –

+0

問題ありません。 FYI:Djangoにはスラグモデルフィールドが組み込まれています:https://docs.djangoproject.com/ja/dev/ref/models/fields/#slugfield – sdolan

+0

もう一度ありがとうございます!それはタイムリーだった。 –

関連する問題