Quando eu corro, makemigrations
recebo o erro
teams.Team.members: (fields.E331) O campo especifica uma relação muitos-para-muitos por meio do modelo 'TeamMember', que não foi instalado.
from django.db import models
from django.conf import settings
from common import TimestampMixin
from users.models import User
class Team(models.Model, TimestampMixin):
name = models.CharField(max_length=100)
owner = models.ForeignKey(
User,
related_name='owned_teams',
on_delete=models.CASCADE
)
members = models.ManyToManyField(
User,
through='TeamMember',
related_name='teams'
)
def __str__(self):
return self.name
class TeamMember(models.Model, TimestampMixin):
user = models.ForeignKey(
User,
on_delete=models.CASCADE
)
team = models.ForeignKey(
Team,
on_delete=models.CASCADE
)
def __str__(self):
return f"{self.user} in {self.team}"
Não entendo por que isso está acontecendo, porque o aplicativo 'teams' está instalado e Team e TeamMember estão no mesmo arquivo. Alguma ideia?
Não consigo reproduzir isso sem o
TimestampMixin
. Normalmente, os mixins são listados primeiro , caso contrário, eles frequentemente falharão em fazer o que se espera que eles façam: substituir certos métodos, porque a Ordem de Resolução de Método (MRO) [python-doc] os empurrará mais para baixo na lista de itens a serem substituídos.A maneira correta seria:
e então use-o com: