Ошибка атрибута с пользователем в приложении django

Я делаю приложение для клиники. Я нахожусь в финансовом разделе своего приложения. Я хочу получать доход через запись на прием. Когда я тестирую эту конечную точку в postman, я получаю следующую ошибку: AttributeError: Получена ошибка AttributeError при попытке получить значение для поля user на сериализаторе UserInfoSerializer. Поле сериализатора может быть названо неверно и не соответствовать какому-либо атрибуту или ключу экземпляра User. Оригинальный текст исключения был: 'User' object has no attribute 'user'.

Я отправляю вам свои файлы, чтобы вы могли помочь мне, так как у меня была эта ошибка в течение нескольких дней без возможности решить ее.

userinfo/models.py

from django.db import models
from django.contrib.auth.models import User

class UserInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="userInfo")
address = models.CharField(max_length=255, blank=True, null=True)
phone = models.CharField(max_length=15, blank=True, null=True)
fecha_nacimiento = models.DateField(blank=True, null=True)
dni = models.CharField(max_length=10, blank=True, null=True)
postal_code = models.CharField(max_length=6, blank=True, null=True)
city = models.CharField(max_length=200, blank=True, null=True)
country = models.CharField(max_length=100, blank=True, null=True)
segundo_apellido = models.CharField(max_length=200, blank=True)

def __str__(self):
    return f"Información de {self.user.username}"`

Мой finanzas/models.py:

from django.db import models
from citas.models import Citas
from userinfo.models import UserInfo

class Transaccion(models.Model):
    INGRESO = 'INGRESO'
    GASTO = 'GASTO'
    INGRESO_COTIZADO = 'INGRESO_COTIZADO'

    TIPO_CHOICES = [
    (INGRESO, 'Ingreso'),
    (GASTO, 'Gasto'),
    (INGRESO_COTIZADO, 'Ingreso_Cotizado')
]

tipo = models.CharField(
    max_length=100,
    choices=TIPO_CHOICES,
    default=INGRESO,
)
monto = models.DecimalField(max_digits=10, decimal_places=2)
descripcion = models.TextField()
fecha = models.DateTimeField(auto_now_add=True)
cita = models.ForeignKey(Citas, on_delete=models.CASCADE)  # Relacionado con la cita
user = models.ForeignKey(UserInfo, on_delete=models.CASCADE)  # Relacionado con el usuario que cotiza
url = models.URLField(null=True, blank=True)

def __str__(self):
    return f"Transacción de {self.tipo} por {self.monto} para la cita {self.cita}"

class ConfiguracionFinanzas(models.Model):
precio_cita_base = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name="Precio base de la cita")
ultima_actualizacion = models.DateTimeField(auto_now=True)

def __str__(self):
    return f"Configuración de Finanzas (Precio Cita: {self.precio_cita_base})"

Мой views.py:

Мой serializers.py

from rest_framework import serializers
from django.db import models
from finanzas.models import Transaccion, ConfiguracionFinanzas
from citas.models import Citas
from userinfo.models import UserInfo
from patients.models import Patient
from django.contrib.auth.models import User
from rest_framework.exceptions import ValidationError
from datetime import datetime


class UserSerializer(serializers.ModelSerializer):

class Meta:
    model = User
    fields = ['id', 'first_name', 'last_name', 'user']

class UserInfoSerializer(serializers.ModelSerializer):
user = UserSerializer()

class Meta:
    model = UserInfo
    fields = ['user', 'address',  'dni', 'postal_code', 'city', 'country', 'segundo_apellido']

def get_user(self, obj):
    # Asegúrate de que el objeto user esté presente y se pase correctamente
    return UserSerializer(obj.user).data if obj.user else None

class PatientSerializers(serializers.ModelSerializer):
class Meta:
    model = Patient
    fields = ['nombre', 'primer_apellido', 'segundo_apellido', 'dni', 'address', 'city', 'code_postal', 'country']

class CitaSerializers(serializers.ModelSerializer):
patient = PatientSerializers()
user = UserInfoSerializer()

class Meta:
    model = Citas
    fields = ['patient', 'fecha', 'descripcion', 'precio', 'cotizada', 'user']

def validate_precio(self, value):
    if value < 0:
        raise ValidationError("El precio de la cita no puede ser negativo.")
    return value

def validate(self, data):
    if data.get('fecha') > datetime.now():
        raise ValidationError("La fecha de la cita no puede ser en el futuro.")
    return data

class ConfiguracionFinanzasSerializer(serializers.ModelSerializer):
class Meta:
    model = ConfiguracionFinanzas
    fields = ['id', 'precio_cita_base', 'ultima_actualizacion']

def validate_precio_cita_base(self, value):
    if value < 0:
        raise ValidationError("El precio base de la cita no puede ser negativo.")
    return value

class TransaccionSerializer(serializers.ModelSerializer):
cita = CitaSerializers()
user = UserInfoSerializer()

class Meta:
    model = Transaccion
    fields = ['id', 'tipo', 'monto', 'descripcion', 'fecha', 'cita', 'user', 'url']

def validate_monto(self, value):
    if value <= 0:
        raise ValidationError("El monto de la transacción debe ser mayor que cero.")
    return value

def validate_tipo(self, value):
    if value not in ['INGRESO', 'GASTO']:
        raise ValidationError("El tipo de transacción debe ser 'INGRESO' o 'GASTO'.")
    return value

def validate(self, data):
    cita = data.get('cita')
    if not cita:
        raise ValidationError("Debe asociar una cita válida.")
    if cita.precio <= 0:
        raise ValidationError("El precio de la cita asociada debe ser mayor que cero.")

    usuario = data.get('user')
    if not usuario:
        raise ValidationError("Debe asociar un usuario válido.")
    return data

Пожалуйста, помогите мне, я только начинаю жить в этом мире, любая помощь приветствуется.

'User' object has no attribute 'user'. - это ключевая часть поднятого исключения.

Удалите user из списка полей в UserSerializer

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'first_name', 'last_name']
Вернуться на верх