Django rest framework create or update in POST resquest

может ли кто-нибудь помочь, пожалуйста, с DRF

в соответствии с POST запросом, я хочу создать(если не существует) или обновить() таблицу

ниже приведены мои коды

model.py

class User1(models.Model):
    user = models.CharField(max_length=10)
    full_name = models.CharField(max_length=20)
    logon_data = models.DateTimeField(blank=True, null=True)

serializer.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User1
        fields = '__all__'

views.py

from .models import User1
from .serializers import UserSerializer
from rest_framework.response import Response
from rest_framework.decorators import api_view

@api_view(['GET', 'POST'])
def UserView(request):
    if request.method == 'GET':
        users = User1.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        users = User1.objects.all()
        serializer = UserSerializer(data=request.data, many=True)

        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=201)
        return Response(serializer.errors, status=400)

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('users/', views.UserView),
]

при POST запросе, я хочу проверить следующим образом:

if user exists:
  if user.full_name == request.fullname
     update (user.logon_data)
     save()
  else:
     update (user.full_name)
     update (user.logon_data)
     save()
else:
  create(
       user = request.user,
       full_name = request.full_name,
       logon_data = request.logon_date)
  save()

POST-запрос для JSON выглядит так:

[
    {
        "user": "testuser1",
        "full_name": "test user1",
        "logon_data": "2022-10-19 09:37:26"
    },
    {
        "user": "testuser2",
        "full_name": "test user2",
        "logon_data": "2022-10-20 07:02:06"
    }
]

Попробуйте это update_or_create это будет проверять на основе request.user, существует ли он в таблице или нет. Также убедитесь, что request.user проверяется объект пользователя, если вы хотите проверить конкретное поле, то это должно быть request.user.user

User.objects.update_or_create(user=request.user.user, defaults={"full_name": request.full_name, "logon_date":request.logon_date})
@api_view(['GET', 'POST'])
def UserView(request):
    if request.method == 'GET':
        users = User1.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = UserSerializer(data=request.data, many=True)
        # if serializer validation fails, raises error by itself
        serializer.is_valid(raise_exception=True)
        for data in serializer.validated_data:
            # checking if data exists else creating an object in User1 model
            # user = data['user'] --> filter to check if that user exist
            # defaults={'full_name': data['full_name'], 'logon_data': #data['logon_data']} --> value provided in defaults is used to update data in #model once the condition is met.
            User1.objects.update_or_create(user=data['user'], defaults={'full_name': data['full_name'], 'logon_data': data['logon_data']})
        return Response(serializer.data, status=201)
Вернуться на верх