2012-04-05 2 views
0

Ich bin neu bei FanDjango und versuche etwas zu verstehen. Ich habe alles eingerichtet und arbeite wunderbar, und ich kann anfordern.facebook.user und Informationen erhalten.Verbinde fandjango (Facebook django) Benutzer mit Django Benutzer um Attribute hinzuzufügen

Aber jetzt möchte ich eine Anwendung entwickeln, die mehr Informationen hat als nur Facebook mir über jeden Benutzer gibt. Zum Beispiel möchte ich Auf-/Ab-Stimmen speichern, die dieser Benutzer auf andere Objekte (d. H. Beziehungen) hat. Ich möchte Benutzereinstellungen speichern. Etc ... Der Standard "Django Way" ist, ein Benutzerprofil zu verwenden, aber ich weiß nicht, wie man den Benutzer von FanDjango mit dem Benutzerprofil verbindet.

Ich bin unklar, wie dies zu tun ist.

Ich habe django-facebook vor fandjango angeschaut, und ich konnte es nicht zur Arbeit bringen, weshalb ich mich dazu bewegte. Sie ermöglichen es Ihrem Benutzerprofil, von seiner Benutzerdefinition zu erben. Kann die gleiche Sache hier funktionieren, oder sollte ich etwas anderes machen?

Dank

Antwort

2

Nun Sie ein Profile Modell einfach erstellen und geben ihm eine OneToOneField zum Fandjango Profil zeigen

class Profile(models.Model): 
    facebook_user = models.OneToOneField("fandjango.User") 
    votes = ... 

dem Sie das Fandjango Profil das Profil und vice versa gegeben bekommen lassen:

request.facebook.user.profile 

und in umgekehrter Richtung:

profile.facebook_user 

Ein Problem dabei ist, dass, weil Sie nicht django.contrib.auth überhaupt verwenden, bekommt man nicht irgendetwas davon nette Features ist so in der Lage, {% if user.is_authenticated %} usw.

Edited hinzufügen zu verwenden:

Extras Details hier zur Verfügung gestellt: https://github.com/jgorset/fandjango/issues/63#issuecomment-4988917

Dann denn ich höre nur das post_save Signal „Fandjango.models.User“ und wenn die „erstellt“ Parameter gesetzt, instanziiert ich das Profil Modell.

@receiver(post_save, sender=User) 
def profile_creation(sender, instance, created, **kwargs): 
    if created: 
     profile, created = Profile.objects.get_or_create(user=instance) 
+0

Ja, das ist wohl der Ansatz, den ich nehmen. Ist es wirklich ein Problem, das django.contrib.auth zu verlieren, wenn ich eine Facebook-App bin und nur Facebook-Nutzer habe? –

+1

Dies ist, was einige Benutzer auf der GitHub des Projekts auf die gleiche Frage beantwortet haben, und wurde von FanDjango Autor als der richtige Ansatz bestätigt. Siehe: https://github.com/jgorset/fandjango/issues/63#issuecomment-4988917 –