2012-01-06 14 views
0

私はPythonとdjangoを学び、シンプルなフォーラムを作ろうとしています。私はモデルを作成しました:Djangoフォーラム固有の投稿はありませんID

class Board(models.Model): 
    title = models.CharField(max_length=200) 
    description = models.TextField(blank = True) 

class Post(models.Model): 
    board = models.ForeignKey(Board) 
    ... 

私は、ボードごとに0から始まる記番号を持っています。どのように私はそれを達成するために私のモデルを変更する必要があります?何が間違っているのですか?

答えて

1

プライマリキーをポストIDとして使用しているかどうかはわかりませんが、ボードごとに0から始める場合は動作しません。 Postモデルに別のフィールドを追加し、saveメソッドで自分で管理することをおすすめします。例:

class Post(models.Model): 
    board = models.ForeignKey(Board) 
    post_count = models.PositiveIntegerField(default=0) 

    def save(self, *args, **kwargs): 
     if not self.id: 
      self.post_count = self.board.post_set.count() 
     super(Post, self).save(*args, **kwargs) 

編集:ブライアンが指摘するようにポストが削除されると、問題がある可能性があります。これにより、重複するpost_idが発生します。 deletedフィールドをモデルに追加して、post_idの正確なカウントを維持する投稿を削除する(「deleted = True」と表示されない)ように「偽」することができます。

編集2:あなたは、

+1

+1編集2. 'try:id = self.board.post_set.latest( 'post_count')except self.DoesNotExist:id 0' –

+0

ありがとう、本当に役に立ちました。私はあなたが正しいと理解していれば、私は 'post_count'だけで動作し、id自体に触れていない場合、削除されたpoblemsはありませんか? – user1135058

+0

'id'はすべてのボードで一意なので、内部使用には使用するべきですが、' post_count'を使用してユーザーを表示したり、URLに含めるように思えます。 –

0

これが本当に必要な場合は、モデルにIntegerFieldの何らかの種類を追加して自分で管理する必要があります。

私は真剣にあなたがそれをしたいと思うのだろうかと疑問に思います。投稿を削除したり投稿をBoardから別の投稿に移動する機能を追加し始めた場合は、維持管理が難しくなります。

+0

(カウントが0である場合は0)私は草場の画像掲示板にその機能を見たと思うpost_countは、このボードの最大投稿数+ 1に等しくなるように設定することができますポストは、それが関連するボードにのみユニークなidを持っています、ちょうど、どのようにジャンゴでそのようなものを作るのだろうかと思います。ご回答ありがとうございます。 – user1135058

関連する問題