Ошибка типа: Поле 'id' ожидало число, но получило <Пользователь: ILador>
Я работаю с моделями Django и Django-Rest-Framework. Когда я пытаюсь получить доступ к моделям через Rest-Framework, я получаю "TypeError at /home/profiles/: Field 'id' expected a number but got <User: ILador>."
вот мой код:
Models.py-
from django.db import models
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator, MinValueValidator
from datetime import date
from .countries import COUNTRIES
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
def username(self):
usern = User.objects.get(id=self.user)
usern = usern.username
return usern
setup = models.BooleanField(default=False)
dob = models.DateField()
def age(self):
today = date.today()
age = today.year - self.birthday.year - ((today.month, today.day) < (self.birthday.month, self.birthday.day))
return age
orgin = models.CharField(max_length=300, choices=COUNTRIES)
lives = models.CharField(max_length=300, choices=COUNTRIES)
bio = models.CharField(max_length=150)
email = models.CharField(max_length=255)
hobbies = models.CharField(max_length=225)
image = models.ImageField(upload_to='images')
Serializers.py-
from rest_framework import serializers
from .models import Profile
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields =('id', 'username', 'password')
extra_kwargs = {'password': {'write_only': True, 'required': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
Token.objects.create(user=user)
return user
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields=( 'id', 'username','email', 'setup', 'dob', 'age', 'orgin', 'lives', 'bio', 'hobbies', 'image',)
Почему я получаю эту ошибку?
def username(self):
usern = User.objects.get(id=self.user) # <--
usern = usern.username
return usern
Вот ошибка: self.user
является экземпляром класса User
, измените эту строку кода, чтобы использовать его свойство id usern = User.objects.get(id=self.user.id)
UPD: Возможно, вам даже не нужен этот метод .get(...)
, просто:
def username(self):
return self.user.username