2016-08-20 3 views
1

Ich habe meiner App namens SocialProfile ein neues Modell hinzugefügt, das dafür zuständig ist, die sozialen Eigenschaften eines Benutzers beizubehalten, der eine Eins-zu-Eins-Beziehung zum UserProfile-Modell hat. Dies ist das SocialProfile Modell in models.py:django model create funktioniert nicht

class SocialProfile(models.Model): 
    profile = models.OneToOneField('UserProfile', on_delete=models.CASCADE) 
    facebook_profiles = models.ManyToManyField('FacebookContact', related_name='synced_profiles', blank=True) 
    google_profiles = models.ManyToManyField('GoogleContact', related_name='synced_profiles', blank=True) 
    hash = models.CharField(max_length=30, unique=True, blank=True) 

    def save(self, *args, **kwargs): 
     if not self.pk: 
      hash = gen_hash(self.id, 30) 
      while SocialProfile.objects.filter(hash=hash).exists(): 
       hash = gen_hash(self.id, 30) 
      self.hash = hash 

    def __str__(self): 
     return str(self.profile) 

Im Moment halte ich einen Rekord für synchronisiert facebook & Google Profile. Das Problem besteht nun darin, dass beim Erstellen neuer Objekte kein Datensatz in der Datenbank hinzugefügt wird. Ich kann keine Instanzen mit Skripten oder Admin erstellen. Im Falle von Skripten werden die folgenden Läufe ohne Fehler, aber kein Datensatz erstellt:

for profile in UserProfile.objects.all(): 
    sp = SocialProfile.objects.create(profile=profile) 
    print(profile, sp) 

SocialProfile.objects.count() 

Die Drucke fertig sind, und korrekt aussehen und die Zahl() 0 zurück versuche ich Objekte in Server-Betreiber zu schaffen, aber ich habe die folgende Fehlermeldung:

"{{socialprofile object}}" needs to have a value for field "socialprofile" before 
this many-to-many relationship can be used. 

ich denke, dass ein anderes Problem, denn wenn ich die Many-to-Many Beziehungen kommentieren, es fertig ist, ohne Fehler (noch keine neue Datensätze). Ich habe es nur erwähnt, wenn es helfen könnte.

Ich habe die Datenbank überprüft, die Tabellen sind dort, auch keine neuen Migrationen werden erkannt.

Jede Hilfe und Idee über, was das Problem sein könnte, würde geschätzt werden!

+0

Ich löschte sogar meine Datenbank und eine neue Datenbank erstellt, immer noch das gleiche passiert ist. – user24353

+0

Können Sie auch Ihr Benutzerprofilmodell posten? –

Antwort

1

Sie haben die Speichermethode überschrieben, sodass sie nie wirklich etwas speichert. Sie müssen die übergeordnete Klasse Methode am Ende nennen:

def save(self, *args, **kwargs): 
    if not self.pk: 
     ... 
    return super(SocialProfile, self).save(*args, **kwargs) 
+0

Danke, so ein Anfängerfehler! – user24353