I am trying to create mock data for test in django.
I have team model like this:
class Team(TimeStampedModel):
id: int
created: datetime
name = models.CharField(max_length=100)
members = models.ManyToManyField(
settings.AUTH_USER_MODEL, related_name="teams", through="Membership"
)
And here is the part of test file:
class TestTeamListViews:
def test_team_list(
self, client: Client, mocker, site_admin_user: User, team_with_members: Team
):
admin1 = team_with_members.members.get(email="[email protected]")
mock_teams = [
Team(
id=1,
name="Test Team",
members=admin1,
created=datetime.datetime.now(),
)
]
This case, I get error:
def __set__(self, instance, value):
> raise TypeError(
"Direct assignment to the %s is prohibited. Use %s.set() instead."
% self._get_set_deprecation_msg_params(),
)
E TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use members.set() instead.
So, I tried
class TestTeamListViews:
def test_team_list(
self, client: Client, mocker, site_admin_user: User, team_with_members: Team
):
admin1 = team_with_members.members.get(email="[email protected]")
mock_teams = [
Team(
id=1,
name="Test Team",
members=Team.members.set(admin1),
created=datetime.datetime.now(),
)
]
Then, I get error: AttributeError: 'ManyToManyDescriptor' object has no attribute 'set' I googled a lot, but there is no solutions I could found other than using add instead of set. Using add gives same error.
Please help me.