正在更新用户模型和保存新模型 - Django
问题描述:
我试图使用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_name
,last_name
和email
?
答
您在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()
感谢。这工作。 – Akshay