Автоматическое добавление зарегистрированного пользователя под '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)