6

私はクラスを持っています

class PlaylistManager(models.Manager):
    def add_playlist(self, name):
        playlist = Playlist(name=name)
        playlist.save()
        return playlist

    def get_playlist_with_id(self, id):
        return super(PlaylistManager, self).get_query_set().filter(pk=id)

class Playlist(models.Model):
    name = models.CharField(max_length=30)
    date_created = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)
    deleted = models.BooleanField(default=False)
    objects = PlaylistManager() # is a customer manager

    def __repr__(self):
        return '<Playlist name:%s, date_created:%s, date_modified:%s, deleted:%s>' % \
                (self.name, self.date_created, self.date_modified, self.deleted)

    class Meta:
        db_table = 'playlists'

そして私test

def test_get_playlist(self):
    playlist = Utility.add_playlist()
    self.assertEqual(Playlist.objects.get_playlist_with_id(playlist.id), playlist)

class Utility():
    @staticmethod
    def add_playlist(playlist_name=PLAYLIST):
        return Playlist.objects.add_playlist(playlist_name)

テストを実行すると、次のようなエラーが表示されます

AssertionError: [<Playlist name:playlist, date_created:2012-07-18 19:54:12.265909+00:00, date_modified:2012-07-18 19:54:12.265955+00:00, deleted:False>] != <Playlist name:playlist, date_created:2012-07-18 19:54:12.265909+00:00, date_modified:2012-07-18 19:54:12.265955+00:00, deleted:False>

2 つのオブジェクトが同じ場合でも。

ここに欠けているものはありますか?

4

3 に答える 3

15

assertEqual()演算子を使用し==てクラスを比較します。==ユーザー定義クラスのデフォルト演算子は、インスタンスをオブジェクト ID で比較します。これは、2 つのインスタンスが同じインスタンスである場合にのみ等しいと見なされることを意味します。

于 2012-07-18T20:04:41.423 に答える
4

モデル ID または pk を比較すると、問題ありません。

于 2012-07-18T20:06:12.330 に答える
3

AssertionError正しいです。インスタンスget_playlist_with_idではありませQuerysetん。単一のインスタンスを返しPlaylistたい場合は、 notを使用する必要があります。get_playlist_with_idgetfilter

于 2012-07-18T20:22:49.037 に答える