2016-07-28 18 views

Antwort

3

Sie können die bestehenden Benutzer Schleife durch und get_or_create() nennen:

for user in User.objects.all(): 
    UserProfile.objects.get_or_create(user=user) 

du in einem data migration setzen könnte, wenn Sie wollen, oder Führe den Code in der Shell aus.

+0

Wie geht das bei Datenmigrationen vor? – BAE

+1

Die Dokumente, die ich verlinkt habe, erklären, wie eine Datenmigration erstellt wird. – Alasdair

-2

Als Reaktion auf den Code werde ich eine get_or_create auch in einem post_init Hörer für Benutzer setzen sagen.

Wenn dieses "alle Felder null ist ok" Profil nur ein schnelles Beispiel ist, würde ich eine Middleware setzen, die alle Benutzer ohne Profil auf die Einstellungsseite umleitet und sie auffordert, zusätzliche Daten zu füllen. (Wahrscheinlich möchten Sie dies trotzdem tun, niemand in der realen Welt wird neue Daten zu seinen bestehenden Profilen hinzufügen, wenn er nicht gezwungen oder gamifiziert wird :))

+0

Was habe ich gerade gelesen? – Nrzonline

0

Für bestehende Benutzer wird geprüft, ob eine solche Instanz bereits existiert, und erstellt einen, wenn es nicht ist.

def post_save_create_or_update_profile(sender,**kwargs): 
    from user_profiles.utils import create_profile_for_new_user 
    if sender==User and kwargs['instance'].is_authenticate(): 
     profile=None 
     if not kwargs['created']: 
      try: 
       profile=kwargs['instance'].get_profile() 
       if len(sync_profile_field(kwargs['instance'],profile)): 
        profile.save() 
      execpt ObjectDoesNotExist: 
       pass 
     if not profile: 
      profile=created_profile_for_new_user(kwargs['instance']) 
    if not kwargs['created'] and sender==get_user_profile_model(): 
     kwargs['instance'].user.save() 

Signal Gebrauch verbinden:

post_save.connect(post_save_create_or_update_profile)