NOT NULL constraint failed: shipping_ship.user_id Django

Итак, я работаю над веб-сайтом по доставке товаров с использованием фреймворка django rest. Сайт объединяет от двух до четырех человек, чтобы они могли легко отправлять свои товары вместе в одно и то же время. Но я столкнулся с серьезным камнем преткновения на представлении, где пользователь заказывает доставку, код приведен ниже.

models.py

from django.db import models
from django.contrib import get_user_model
User = get_user_model()
class Container(models.Model):
    container_type = models.Charfield(max_length = 30, blank=False, null = False)
    max_users = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places =2, default=0, blank=True, null=True)
    users = models.ManyToManyField(User)

class Ship(models.Model):
    container = models.ForeignKey(Container, related_name='cont', on_delete=models.CASCADE)
    user = models.ForeignKey(User, related_name='shipper', on_delete=models.CASCADE)
    location = (
    ('France', 'France'),
    )
    from_location = models.CharField(max_length=30, choices=location, blank=False, null=False)

    to_location = (
    ('Lagos', 'Lagos'),
    ('Abuja', 'Abuja'),
    ('Abeokuta', 'Abeokuta'),
    ('Osun', 'Osun'),
    )
    to_location = models.CharField(max_length=30, choices=to_location, blank=False, null=False)
    date_leaving = models.DateField(auto_now=False)
    price = models.DecimalField(max_digits=10, decimal_places=2, default=0, blank=True, null=True)

    def __str__(self):
      return self.user 

тогда мой файл serializer.py

from rest_framework import serializers
from .models import Container, Ship



class ContainerSerializer(serializers.ModelSerializer):

   class Meta:
      model = Container
      fields = '__all__'

class MiniContainerSerializer(serializers.ModelSerializer):

    class Meta:
        model = Container
        fields =['container_type', 'price']

class ShipSerializer(serializers.ModelSerializer):
    class Meta:
       model = Ship
       fields = '__all__'
       read_only_fields = ('user', 'price')


class MiniShipSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ship
        fields = ['container', 'from_location', 'to_location']

и теперь мой файл views.py, с которым у меня проблемы

from django.shortcuts import render
from django.shortcuts import get_object_or_404 

from rest_framework.generics import ListCreateAPIView, CreateAPIView, ListAPIView, RetrieveUpdateDestroyAPIView, RetrieveAPIView

from .serializers import ContainerSerializer, MiniContainerSerializer, ShipSerializer, MiniShipSerializer

from rest_framework import permissions, status

from rest_framework.response import Response


from .models import Container, Ship

class ShipAPI(ListCreateAPIView):
    serializer_class = ShipSerializer

    def get_queryset(self):
       user = self.request.user 
       queryset = Ship.objects.filter(user=user)
       return queryset

    def Book_shipping(self, request, *args, **kwargs):
       user = request.user 
       container = get_object_or_404(Container, pk=request.data['container'])
       if container.users.count() >= container.max_users:
           return Response('container already full')# here i'm trying to set limits so the users joining each container won't surpass the max users.
       cont = container(users=user)
       cont.save()
       from_location = (request.data['from_location'])
       to_location = (request.data['to_location'])
       date_leaving = int(request.data['date_leaving'])
       price = container.price / container.max_users
       cart = Ship(container=container, user=user, from_location=from_location, to_location=to_location, date_leaving=date_leaving, price=price)
       cart.save()
       serializer = ShipSerializer(cart)
       data ={'message': 'shipping successfully created',
             'data':serializer.data}
       return Response(data=data, status=status.HTTP_201_CREATED)

и после проверки конечной точки возвращает эту ошибку: IntegrityError at /Shipping/Ship/ NOT NULL constraint failed: shipping_ship.user_id

Я пробовал отлаживать и просматривать его снова и снова, может кто-нибудь может мне помочь? Заранее спасибо. И да, я пробовал удалять миграции и базу данных.

Поскольку ваша модель Container имеет отношения ManyToMany с моделью User. Поэтому это может не работать как cont = container(users=user)


Для меня это работало следующим образом:

cont = container.users.add(user)
cont.save()
Вернуться на верх