Как создатьAPIView, используя request.user

Здравствуйте, мне интересно, какова лучшая практика для создания новой записи модели с пользователем на основе запроса в Django Rest Framework?

Модели:

class Asset(models.Model):
    user = models.ForeignKey(UserAccount, on_delete=models.CASCADE, related_name="assets")
    name = models.CharField(max_length=200)
    amount = models.DecimalField(max_digits=10, decimal_places=2)

Сериализаторы:

class AssetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Asset
        fields = '__all__'

Виды

class CreateAssetView(generics.CreateAPIView):
    serializer_class = AssetSerializer
    <Doesn't seem to work, possibly since user isn't in the json>
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

В принципе, я хочу иметь возможность отправить POST-запрос {name: 'myasset', amount: '50'} на эту конечную точку и получить новый актив, сохраненный с полем User, полученным из запроса. Каков наилучший способ сделать это? Спасибо

Чаще всего я делаю это, используя представления на основе функций, а не классов. ..: В принципе, это также сможет отправить запрос POST и сохранит пользователя, который запросил пост-запрос.

from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework.permissions import IsAuthenticated

@api_view(['POST'])
@permission_classes([IsAuthenticated]) 
def perform_create(request, pk):
    user = request.user
    asset= Asset.objects.get(id=pk)
    data = request.data
    # Create Asset
    asset = Asset.objects.create(
            user=user,
            name=user.first_name,
            amount=data['amount '],
        )
    asset.save()
    return Response('Asset Added')

А для возврата данных я создаю другое представление для сериализованных данных где это необходимо. Я уверен, что есть и другие подходы, но этот намного проще и легче сделать.

Вернуться на верх