更新用户模型并保存新模型-Django

更新用户模型并保存新模型-Django,django,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 = mode

我试图使用
用户
模型作为
外键
保存模型,但当我试图保存模型时,我得到一个
递归错误:超过了最大递归深度

我的代码是:

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\u name
last\u name
email

您在save()方法中手动调用get\u或\u create(),但get\u或\u create()本身也在调用save()。无需创建obj2,因为您正在最后调用super方法

你可以这样做:

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

您正在save()方法中手动调用get\u或\u create(),但是get\u或\u create()本身也在调用save()。无需创建obj2,因为您正在最后调用super方法

你可以这样做:

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