В моем приложении django есть отношение ManytoMany между Orders
и Packages
. В заказе может быть несколько пакетов. Я хочу знать об обновлении и методах создания
Models.py
class Package(models.Model):
prod_name = models.CharField(max_length=255, default=0)
quantity = models.IntegerField(default=0)
unit_price = models.IntegerField(default=0)
class Orders(models.Model):
order_id = models.CharField(max_length=255, default=0)
package = models.ManyToManyField(Package)
is_cod = models.BooleanField(default=False)
Serializers.py
class PackageSerializer(serializers.ModelSerializer):
class Meta:
model = Package
fields = "__all__"
class OrderSerializer(serializers.ModelSerializer):
package = PackageSerializer(many=True)
class Meta:
model = Orders
fields = "__all__"
Views.py
class OrdersCreateAPIView(generics.CreateAPIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = OrderSerializer
def post(self, request):
serializer = OrderSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Достаточно ли этого для обработки связанных данных? Я пытаюсь понять отношения ManytoMany
как в Django, так и в DRF, поэтому, пожалуйста, объясните, нужно ли мне в любом случае изменить Модели или представления
Обновление:
Я обновил свой Сериализатор, а также просмотр для создания manytomany
связанных объектов, таких как:
class OrderSerializer(serializers.ModelSerializer):
package = PackageSerializer(many=True)
class Meta:
model = Orders
fields = "__all__"
def create(self, validated_data):
package_data = validated_data.pop('package')
pkgs = []
order = Orders.objects.create(**validated_data)
for i in package_data:
try:
p = Package.objects.create(**i)
pkgs.append(p)
except:
pass
order.package.set(pkgs)
return order
Views.py
class OrdersCreateAPIView(CreateAPIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = OrderSerializer
def perform_create(self,serializer):
serializer.save(owner=self.request.user)
Однако мне все еще неясно, переопределить метод update
RetrieveUpdateDestroyAPIView
. Кроме того, является ли вышеуказанный метод правильным способом хранения M2M
связанных объектов?
Пожалуйста, помогите с обновлением части сериализатора, я понимаю, что должен передать запрос в сериализаторе