2012-02-11 13 views
1

私はFlaskとMongoEngineでブログエンジンを開発しています。MongoEngineで自動インクリメント

私はMongoEngineがそれぞれの新しいポストのための新しいIDを作成する必要があるので、私はこのような何かやって考えていた:

class Post(Document): 
    title = StringField(required=True) 
    content = StringField(required=True) 
    published_at = datetime.utcnow() 
    id = Post.objects.count() + 1 

ウィルこの仕事を?これを行うには良い方法がありますか?

答えて

9

まず増分IDが必要な理由を理解する必要がありますか?彼らは何を解決するのですか?

TheresのMongoDBの中にネイティブソリューション - お読みください:http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

すでにポストのpkで一意の識別子を持っているとして、なぜそれを使うのか?

最後に、私が愚か者からあなたを断念していないなら、あなたのために増分を処理するmongoengineにSequenceFieldがあります。 https://mongoengine-odm.readthedocs.org/en/latest/apireference.html#mongoengine.fields.SequenceField

+1

投稿だけでなくユーザーも増分IDが必要ですが、自動生成IDはURLでの使用には適していません。そのため自分自身を作成し​​たいのです。 –

+0

確かに、人間が読めるスラッグを作ることもできます。そうすれば、URLのアクセシビリティも向上します。 – Ross

+0

ありがとう、私はそれを検討します。 –

2

私はそれを理解しました。

Postクラスは次のようになります。

class Post(Document): 
     title = StringField(required=True) 
     content = StringField(required=True) 
     published_at = datetime.utcnow() 
     ID = IntField(min_value=1) 

とポストを挿入する機能で、私のようなので、1によってそれらをインクリメントし、利用可能なレコードをカウントし、:

def create_post(title, content): 
     Post(title=title, content=content, ID=Post.objects.count() + 1).save() 
+3

マフムード - 正しい解決策ではない、競合状態が含まれているため、失敗する可能性があります。 – Ross