Автоматическое добавление зарегистрированного пользователя под 'Created_By' в модель в Django Rest Framework

У меня есть модель под названием Properties, как показано ниже. Я пытаюсь сохранить данное свойство в моей БД с текущим вошедшим пользователем из формы в моей приборной панели. Моя модель пользователя является пользовательской моделью пользователя AUTH_USER_MODEL = 'Landlords.Profile' Сначала у меня не было created_by и все было хорошо. Но потом, когда я внедрил ее, сделал необходимые миграции, когда я пытаюсь отправить данные из формы, я получаю эту ошибку.

django.db.utils.IntegrityError: null value in column "created_by_id" of relation "Properties_rentalproperties" violates not-null constraint
DETAIL:  Failing row contains (1, Prime Apartments, Apartment, Kileleshwa, Nairobi, 10, 2021-11-07, 2021-11-07, null).

Как назначить моего вошедшего пользователя свойству, созданному во фреймворке Django Rest? Большинство решений на SO ориентированы на API представления на основе классов. Как я могу сделать это с API представлениями на основе функций? Есть ли что-то, что я упускаю или делаю неправильно?

Моя модель

from django.db import models
from django.conf import settings

class RentalProperties(models.Model):
    property_name = models.CharField(max_length=255)
    property_type = models.CharField(choices=TYPE, max_length=255)
    property_location = models.CharField(max_length=255)
    county = models.CharField(choices=COUNTY, max_length=255)
    number_of_units = models.IntegerField()
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default='')
    date_created = models.DateField(auto_now_add=True)
    last_modified = models.DateField(auto_now=True)

    def __str__(self):
        return self.property_name

    class Meta:
        verbose_name_plural = "Properties"

Мой сериализатор

from apps.Properties.models import RentalProperties
from rest_framework import serializers

class PropertiesSerializers(serializers.ModelSerializer):
    class Meta:
        model = RentalProperties
        fields = ('id', 'property_name', 'property_type', 'property_location', 'county', 'number_of_units', 'created_by', 'date_created', 'last_modified')

Мое представление API

@login_required(login_url='Login' )
def AllProperties(request):
    return render(request, 'Dashboard - Properties.html')

@api_view(['POST'])
def AddPropertyAPI(request):
    serializer = PropertiesSerializers(data=request.data)
    if serializer.is_valid(raise_exception=True):
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
        
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Я думаю, что проблема в том, что вы пытаетесь сохранить модель RentalProperties с created_by=null. Если так и задумано, то позвольте created_by быть нулю, изменив вашу модель:

created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, default=None)

ОБНОВЛЕНИЕ:

Вероятно, вам следует обновить request.data с пользователем, отправляющим этот запрос, попробуйте сделать что-то вроде этого:

@api_view(['POST'])
def AddPropertyAPI(request):
    request_data = dict(request.data)
    request_data["created_by"] = request.user
    serializer = PropertiesSerializers(data=request_data)
    if serializer.is_valid(raise_exception=True):
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
        
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх