2017-06-19 7 views
0

Ich versuche, ein Modell zu speichern, indem ich User Modell als ForeignKey verwenden, aber wenn ich versuche, das Modell zu speichern, erhalte ich eine .Benutzermodell aktualisieren und neues Modell speichern - Django

Mein Code ist:

from django.db import models 
from django.contrib.auth.models import (User, Group) 
from phonenumber_field.modelfields import PhoneNumberField 
class AuthenticatorModel(models.Model): 
    id = models.IntegerField(auto_created=True, default=1, primary_key=True, serialize=False) 
    user_id = models.ForeignKey(User, related_name='auth_user', null=True) 
    first_name = models.CharField(default='First Name', max_length=50) 
    last_name = models.CharField(default='Last Name', max_length=50) 
    phone_number = PhoneNumberField() 
    email_id = models.CharField(default='email ID', help_text='Enter the email ID used to register the Django user', 
           max_length=50) 

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None): 
     try: 
      obj = User.objects.get(id=self.id) 
      obj2 = AuthenticatorModel.objects.get_or_create(id=self.id) 
     except User.DoesNotExist: 
      return 

     obj.first_name = self.first_name 
     obj.last_name = self.last_name 
     obj2.phone_number = self.phone_number 
     obj.email = self.email_id 

     obj.save() 
     return super(AuthenticatorModel, self).save() 

Ich bin nicht sicher, was ist falsch in diesem. Wie würde ich Inhalt für AuthenticatorModel erstellen und first_name, last_name und email aktualisieren?

Antwort

2

Sie rufen get_or_create() in der save() - Methode manuell auf, aber get_or_create() selbst ruft auch save() auf. Es ist nicht notwendig, obj2 zu erstellen, da Sie die Super-Methode am Ende aufrufen.

Sie können dies nur tun:

def save(...): 
    try: 
     obj = User.objects.get(id=self.id) 
    except User.DoesNotExist: 
     return 

    obj.first_name = self.first_name 
    obj.last_name = self.last_name 
    obj.email = self.email_id 
    obj.save() 

    return super(AuthenticatorModel, self).save() 
+0

Dank. Das hat funktioniert. – Akshay

Verwandte Themen