Утверждение о наличии добавленных объектов в отношении Django ManyToMany

У меня есть следующая модель;

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)

Я хочу утверждать, что добавленные пользователи действительно присутствуют в качестве "участников" "Станции"

Кто-нибудь, пожалуйста, скажите мне, как

assert station.members == [user2,user3] не летает station.members на самом деле <Station: Station object>.members вместо.

2 ответа

Решение

station.members Диспетчер, то есть это средство доступа для запросов к связанным пользователям. Вам действительно нужно выполнить запрос: в этом случае station.members.all(),

Несколько проблем с вашим кодом, это вывод в моей консоли:

>>> station.members
<django.db.models.fields.related.ManyRelatedManager object at 0x110774b10>

station.members - это ManyRelatedManager, а не список user2 и user3.

station.members.all() вернет вам список user2 и user3, но station.members.all() - это QuerySet вместо списка:

>>> type(station.members.all())
<class 'django.db.models.query.QuerySet'>

Так делаю assert station.members.all() == [user2, user3] никогда не будет правдой.

Другие вопросы по тегам