Получил AttributeError при попытке получить значение для поля `email` на сериализаторе` UserSerializer` - PullRequest
0 голосов
/ 20 июня 2019

enter image description here

Создание Django REST FRamework API. Использование Abstract User и электронной почты является параметром регистрации по умолчанию с использованием.

AttributeError at / post /

Получена ошибка AttributeError при попытке получить значение для поля email на сериализаторе UserSerializer. Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре Post. Исходный текст исключения был: объект 'Post' не имеет атрибута 'email'.

class PostSerializer(ModelSerializer):
    category  = ReadOnlyField(source='category.name')
    author = UserSerializer(source='user.email')
    #question = serializers.CharField(source='question.text', read_only=True)


    class Meta:
        model = Post
        fields = '__all__'


class User(AbstractUser):
    username = models.CharField("Username", max_length=50, unique=True)
    email = models.EmailField("Email Address", max_length=254, unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name']



class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE, to_field='email')
    category = models.ForeignKey(Category, related_name='categorys', on_delete=models.CASCADE)
    body = models.TextField()
    image = models.ImageField(upload_to='blog/%Y/%m/%d', blank=True)
    publish = models.DateTimeField(default=timezone.now)
    rating = models.IntegerField("Rumor Rate", validators=[MaxValueValidator(5), MinValueValidator(0)], default=1, null=True)
    created = models.DateTime[![enter image description here][1]][1]Field(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

1 Ответ

0 голосов
/ 21 июня 2019

Я полагаю, что вы хотите вернуть адрес электронной почты автора в поле автора при запросе конечной точки Post. Вы также можете преобразовать поле author в сериализаторе в ReadOnlyField (как category) и указать source='author.email', поскольку внешний ключ вашей модели называется так:

class PostSerializer(ModelSerializer):
    category = ReadOnlyField(source='category.name')
    author = ReadOnlyField(source='author.email')

    # ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...