断言 Django ManyToMany 关系中添加对象的存在
Asserting for presence of added objects in Django ManyToMany relation
我有以下型号;
class Station(models.Model):
name = models.CharField(max_length=50)
address = models.TextField(default='')
owner = models.ForeignKey(User,default='')
members = models.ManyToManyField(User, related_name='members')
现在在下面的代码之后;
user1 = User.objects.create_user(username="username1",
password="password1")
user1.save()
user2 = User.objects.create_user(username="username2",
password="password2")
user2.save()
user3 = User.objects.create_user(username="username3",
password="password3")
user3.save()
station = Station(name="somename",
address="someaddress",
owner=user1,
)
station.save()
station.members.add(user2,user3)
我想断言添加的用户确实存在,因为 "members" of "Station"
有人请告诉我如何
assert station.members == [user2,user3]
不会飞。 station.members 实际上是 <Station: Station object>.members
。
station.members
是一个Manager,即它是查询相关用户的accessor。您需要实际执行查询:在本例中,station.members.all()
.
您的代码存在一些问题,这是我控制台中的输出:
>>> station.members
<django.db.models.fields.related.ManyRelatedManager object at 0x110774b10>
station.members 是 ManyRelatedManager 而不是 user2 和 user3 的列表。
station.members.all() 会 return 你一个 user2 和 user3 的列表,但是 station.members.all() 是一个 QuerySet 而不是一个列表:
>>> type(station.members.all())
<class 'django.db.models.query.QuerySet'>
这样做assert station.members.all() == [user2, user3]
永远不会是真的。
我有以下型号;
class Station(models.Model):
name = models.CharField(max_length=50)
address = models.TextField(default='')
owner = models.ForeignKey(User,default='')
members = models.ManyToManyField(User, related_name='members')
现在在下面的代码之后;
user1 = User.objects.create_user(username="username1",
password="password1")
user1.save()
user2 = User.objects.create_user(username="username2",
password="password2")
user2.save()
user3 = User.objects.create_user(username="username3",
password="password3")
user3.save()
station = Station(name="somename",
address="someaddress",
owner=user1,
)
station.save()
station.members.add(user2,user3)
我想断言添加的用户确实存在,因为 "members" of "Station"
有人请告诉我如何
assert station.members == [user2,user3]
不会飞。 station.members 实际上是 <Station: Station object>.members
。
station.members
是一个Manager,即它是查询相关用户的accessor。您需要实际执行查询:在本例中,station.members.all()
.
您的代码存在一些问题,这是我控制台中的输出:
>>> station.members
<django.db.models.fields.related.ManyRelatedManager object at 0x110774b10>
station.members 是 ManyRelatedManager 而不是 user2 和 user3 的列表。
station.members.all() 会 return 你一个 user2 和 user3 的列表,但是 station.members.all() 是一个 QuerySet 而不是一个列表:
>>> type(station.members.all())
<class 'django.db.models.query.QuerySet'>
这样做assert station.members.all() == [user2, user3]
永远不会是真的。