タグ付けされた質問 「django-managers」

13
Djangoのさまざまな設定でユニットテストを行う方法
単体テストのDjango設定をオーバーライドする簡単なメカニズムはありますか?特定の数の最新オブジェクトを返すモデルの1つにマネージャーがいます。返されるオブジェクトの数は、NUM_LATEST設定によって定義されます。 これにより、誰かが設定を変更した場合にテストが失敗する可能性があります。の設定をオーバーライドしてsetUp()、後で復元するにはどうすればよいtearDown()ですか?それが不可能な場合、サルがメソッドにパッチを当てたり、設定を模擬したりする方法はありますか? 編集:ここに私のマネージャーコードがあります: class LatestManager(models.Manager): """ Returns a specific number of the most recent public Articles as defined by the NEWS_LATEST_MAX setting. """ def get_query_set(self): num_latest = getattr(settings, 'NEWS_NUM_LATEST', 10) return super(LatestManager, self).get_query_set().filter(is_public=True)[:num_latest] マネージャーはsettings.NEWS_LATEST_MAX、クエリセットをスライスするために使用します。getattr()単にデフォルト設定は存在しないはずを提供するために使用されます。

6
モデルインスタンスからManagerにアクセスできません
別のインスタンスでモデルオブジェクトインスタンスを取得しようとしていますが、このエラーが発生します: Manager isn't accessible via topic instance これが私のモデルです: class forum(models.Model): # Some attributs class topic(models.Model): # Some attributs class post(models.Model): # Some attributs def delete(self): forum = self.topic.forum super(post, self).delete() forum.topic_count = topic.objects.filter(forum = forum).count() これが私の見解です: def test(request, post_id): post = topic.objects.get(id = int(topic_id)) post.delete() そして私は得る: post.delete() forum.topic_count = topic.objects.filter(forum …

1
create()をオーバーライドする代わりに、Django models.Managerでcreate_foo()を定義するのはなぜですか?
Djangoのドキュメントを読んで、マネージャのFooようcreate_fooに定義することによって名前が付けられたモデルのカスタム作成メソッドを作成することをお勧めします。 class BookManager(models.Manager): def create_book(self, title): book = self.create(title=title) # do something with the book return book class Book(models.Model): title = models.CharField(max_length=100) objects = BookManager() book = Book.objects.create_book("Pride and Prejudice") 私の質問は、前のcreate方が基本クラスのメソッドを単にオーバーライドするよりも好ましい理由です: class BookManager(models.Manager): def create(self, title): book = self.model(title=title) # do something with the book book.save() return book class Book(models.Model): …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.