# models.py
class User(tortoise.Model):
id = fields.BigIntField(pk=True, generated=False)
groups: fields.ManyToManyRelation[Group]
class Group(tortoise.Model):
users: fields.ManyToManyRelation[User] = fields.ManyToManyField(
"bot.User", through="group__user", related_name="groups"
)
To this:
# models.py
class User(tortoise.Model):
id = fields.BigIntField(pk=True, generated=False)
groups: fields.ManyToManyRelation[Group]
admin_in_groups: fields.ManyToManyRelation[Group]
class Group(tortoise.Model):
users: fields.ManyToManyRelation[User] = fields.ManyToManyField(
"bot.User", through="group__user", related_name="groups"
)
admins: fields.ManyToManyRelation[User] = fields.ManyToManyField(
"bot.User", through="group__admin", related_name="admin_in_groups"
)
aerich migrate --name "add_group_admins"
Anything else?
I think this kind of sorting might help with other types of fields as well, but I have no time to investigate that right now. The fix in this PR is urgent to me, though.
What?
new_m2m_fields
before comparing them usingdictdiffer.diff(...)
.Why?
Otherwise, if one adds more m2m fields, the
diff
would produce theaction="change"
result, instead of theaction="add"
one. See:How to test?
Try migrating this:
To this:
Anything else?
I think this kind of sorting might help with other types of fields as well, but I have no time to investigate that right now. The fix in this PR is urgent to me, though.