Django plusieurs-à-plusieurs relations, et par le biais de

Je veux stocker de l'utilisateur qui a demandé à un utilisateur à un groupe... mais django est de me dire ce est ambiguë et contre les règles (ce qui est logique).

groupes.groupe: Intermédiaire modèle
Group_to_Member a plus d'un
clé étrangère à l'Utilisateur, qui est
ambigu et n'est pas autorisée.

Alors, comment dois-je faire cela correctement? Peut-être une relation générique? pourrait fonctionner, mais semble un peu compliqué... Voici comment je m'approchais de lui (sans rapport avec les bits supprimé)

from django.contrib.auth.models import User

class UserGroup(models.Model):
    members = models.ManyToManyField(User, through='Group_to_Member')

class UserGroup_to_Member(models.Model):
    group = models.ForeignKey(UserGroup)
    member = models.ForeignKey(User)

    invited_by = models.ForeignKey(User, related_name="group_invited_users")

Solution

Ok, donc j'ai fait une petite combinaison des réponses les gars, vous fourni (Merci!) et les choses que j'ai trouvé sur internet en plus de ma propre certes maigres python-fu:

from django.contrib.auth.models import User

class UserGroup(models.Model):
    # notice there is no member object here
    ... other model data

    def add_member(self, **kwargs):
        g2m = UserGroup_to_Member(group = self,  **kwargs)
        g2m.save()

    def remove_member(self, member):
        g2m = UserGroup_to_Member.objects.get(group=self, member=member)
        g2m.delete()

    # This is not elegant at all, help please? I'm pretty sure it isn't
    # as bad on the database as it looks though.
    def get_members(self):
        g2ms = UserGroup_to_Member.objects.filter(group=self)
        member_ids = [g2m.member.id for g2m in g2ms]
        members = User.objects.none()
        for id in member_ids:
            members = members | User.objects.get(id=id)
        return members

class UserGroup_to_Member(models.Model):
    group = models.ForeignKey(UserGroup)
    member = models.ForeignKey(User)

    invited_by = models.ForeignKey(User, related_name="group_invited_users")
Il y a cette réponse précédente: stackoverflow.com/questions/583327/...
il n'est pas question d'ajouter un related_name, le problème est qu'il y a 2 foreignkey relations à l'Utilisateur, il n'a pas d'importance ce que je les appelle, ou si j'ai mis un related_name
L'autre avait exactement le même problème que vous (c'est à dire 2 clés étrangères sur la même table) j'ai donc pensé qu'il serait utile. Mon django-fu est une sorte de brute mais peut-être que j'ai mal compris votre question. Avez-vous de la bd? Pourquoi ne pas simplement lancer inspectdb sur elle et de voir quels sont les modèles qu'il génère? docs.djangoproject.com/en/dev/ref/django-admin
À partir de la documentation (à partir de la dernière réponse à cette autre question), il semblerait que ce que vous voulez faire n'est pas possible de sortir de la boîte. docs.djangoproject.com/en/dev/topics/db/models/...
Merci pour votre aide, j'ai obtenu une solution reconstitué

OriginalL'auteur Jiaaro | 2009-08-20