2017-06-19 98 views
0

我试图使用User模型作为ForeignKey保存模型,但是当我尝试保存模型时,我得到RecursionError: maximum recursion depth exceeded正在更新用户模型和保存新模型 - Django

我的代码是:

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() 

我不知道什么是错在这。如何为AuthenticatorModel创建内容并更新first_namelast_nameemail

回答

2

您在save()方法中手动调用get_or_create(),但get_or_create()本身也调用save()。没有必要创建obj2,因为你最后调用了超级方法。

你可能只是这样做:

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

感谢。这工作。 – Akshay