Если я включу board_field
в определение UserSerializer
, я получу:
AttributeError: у объекта 'User' нет атрибута 'board_field'
if Я исключаю это, я получаю:
поле было объявлено на сериализаторе, но не включено
Я использую модель по умолчанию Django User
, но то, что я хочу сериализация - это обратное отношение внешнего ключа от моей Board
модели.
Прежде всего, у меня есть эта структура проекта.
foo_project
- foo_project
- __init__.py
- asgi.py
- settings.py
- urls.py
- wsgi.py
- apps
- board
- __init__.py
- admin.py
- apps.py
- models.py
- serializers.py
- tests.py
- urls.py
- views.py
- accounts
- __init__.py
- admin.py
- apps.py
- models.py
- serializers.py
- tests.py
- urls.py
- views.py
Плата,
# models.py
class Board(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user')
title = models.CharField(blank=False, max_length=255)
body = models.TextField(blank=False)
image = models.ImageField(upload_to='time_line_photo')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('article_detail', args=[str(self.id)])
class Meta:
ordering = ['-created']
# serializers.py
from rest_framework import serializers
from .models import Board
from django.contrib.auth.models import User
class BoardSerializer(serializers.ModelSerializer):
class Meta:
model = Board
fields = ('id', 'author', 'title', 'body', 'image', 'created','updated')
# views.py
from django.contrib.auth.models import User
from django.shortcuts import render
from rest_framework import generics
from .models import Board
from .serializers import BoardSerializer
class BoardList(generics.ListCreateAPIView):
queryset = Board.objects.all()
serializer_class = BoardSerializer
class BoardDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Board.objects.all()
serializer_class = BoardSerialize
Accounts,
# serializers.py
from rest_framework import serializers
from django.contrib.auth.models import User
from ..board.models import Board
class UserSerializer(serializers.ModelSerializer):
board_field = serializers.PrimaryKeyRelatedField(
many=True, queryset=Board.objects.all()
)
class Meta:
model = User
fields = ('id', 'username', 'board_field')
# If I include board_field, I get AttributeError: 'User' object has no attribute 'board_field'
# I understand that I am using default django User model, but it is foreign key in Board model.
# views.py
from django.contrib.auth.models import User
from django.shortcuts import render
from rest_framework import generics
from .serializers import UserSerializer
class UserList(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetail(generics.RetrieveAPIView):
queryset = User.objects.all()
serializer_class = UserSerialize
Как я заявляю в комментарии, я думаю, что это моя проблема. Как UserSerializer может соединиться с Board? Я использую, Python = 3.7.4 Джанго = 3.0.4 djangorestframework = 3.11.0 Заранее спасибо!