2011-01-06 10 views
0

Ich habe das folgende Modell-Setup.Probieren Sie und erweitern Sie das contrib.auth.user Modell und fügen Sie eine "Beziehungen" verwalten

from django.db import models 
from django.contrib.auth.models import User 

class SomeManager(models.Manager): 
    def friends(self): 
     # return friends bla bla bla 


class Relationship(models.Model): 
    """(Relationship description)""" 
    from_user = models.ForeignKey(User, related_name='from_user') 
    to_user = models.ForeignKey(User, related_name='to_user') 
    has_requested_friendship = models.BooleanField(default=True) 
    is_friend = models.BooleanField(default=False) 

    objects = SomeManager() 

relationships = models.ManyToManyField(User, through=Relationship, symmetrical=False) 
relationships.contribute_to_class(User, 'relationships') 

Hier nehme ich das Benutzerobjekt und benutze contribute_to_class um 'Beziehungen' zum Benutzerobjekt hinzuzufügen. Die Beziehung wird angezeigt, aber wenn Sie User.relationships.friends aufrufen, sollte die Methode friends() ausgeführt werden. Irgendwelche Ideen, wie ich das machen würde?

Dank

+0

Warum verwenden Sie nicht die Benutzerprofilfunktion? http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users Dies sollte der richtige Weg sein, Features zur 'User' Klasse hinzuzufügen. –

+0

Ich hoffe, dies als "App" zu veröffentlichen und nicht jeder Benutzer hat das Profil-Modul-Setup. – dotty

+1

Es ist eine einzeilige Änderung der Einstellungen, so dass jeder das Profilmodul konfigurieren kann. –

Antwort

1

Ich würde dies stattdessen tun.

f= Relationships.objects.filter(from_user=some_user, is_friend=True) 

Das spart den Versuch, mit dem Benutzer herumzualbern.

0

Vielleicht sind Sie nicht die ".objects" im Aufruf:

User.relationships.objects.friends() 
+0

löst den Fehler 'ManyRelatedManager' Objekt hat kein Attribut 'Objekte' – dotty

0

Sie müssen Django mitteilen, dass Sie Ihren Manager für verwandte Suchvorgänge verwenden sollen. Standardmäßig verwendet es einen Standard für diese. Sie müssen use_for_related_fields auf dem Manager festlegen - siehe the documentation on this.

Verwandte Themen