Django Rest Framework - AttributeError: Получил AttributeError при попытке - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в Django Rest Framework и пытаюсь создать API, который позволяет пользователю создавать проекты. Это означает, что пользователь, прошедший аутентификацию с помощью токена knox, должен стать владельцем созданного экземпляра проекта.

Однако при выполнении POST-запроса к / api / project / я получаю следующую ошибку:

AttributeError: Got AttributeError when attempting to get a value for field `username` on serializer `UserSerializer`. The serializer field might be named incorrectly and not match any attribute or key on the `ManyRelatedManager` instance. Original exception text was: 'ManyRelatedManager' object has no attribute 'username'.

urls.py:

urlpatterns = [
    path('api/projects/', ProjectListCreate.as_view()),
    path('api/project/',  ProjectCreate.as_view()),
    path('api/project/<int:pk>',  ProjectDetailShow.as_view())
]

api.py:

class ProjectListCreate(generics.ListAPIView):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer


class ProjectDetailShow(generics.RetrieveUpdateDestroyAPIView):
    queryset = Project.objects.all()
    serializer_class = ProjectDetailSerializer
    permission_classes = [IsOwnerOrReadOnly]


class ProjectCreate(generics.CreateAPIView):
    serializer_class = ProjectDetailSerializer
    permission_classes = [permissions.IsAuthenticated]

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

serializer.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')


class ProjectSerializer(serializers.ModelSerializer):
    owner = UserSerializer(read_only=True)

    class Meta:
        model = Project
        fields = ('id', 'name', 'owner', 'mission', 'category', 'status')


class ProjectDetailSerializer(serializers.ModelSerializer):
    owner = UserSerializer(read_only=True)
    participants = UserSerializer(read_only=True)

    class Meta:
        model = Project
        fields = ('id', 'name', 'owner', 'participants', 'mission', 'category', 'description', 'status')

models.py:

class Project(models.Model):
    STATUS_CHOICES = (...)
    CATEGORY_CHOICES = (...)
    name = models.CharField(max_length=50)
    owner = models.ForeignKey(
        User, related_name="owned_projects", on_delete=models.CASCADE)
    participants = models.ManyToManyField(User, related_name="participates_projects", default=None)
    mission = models.CharField(max_length=100)
    description = models.CharField(max_length=500)
    category = models.CharField(max_length=100, choices=CATEGORY_CHOICES, default='Geplant')
    status = models.CharField(max_length=100, choices=STATUS_CHOICES, default='Andere')
    last_update = models.DateTimeField(auto_now_add=True)

Я надеюсь, что кто-нибудь может мне помочь с этим!

Заранее спасибо:)

...