Я работаю над API электронной коммерции, и у меня есть 2 модели (products и CartList) и 2 класса сериализатора (productSerializer и CartListSerializer), и я хочу, чтобы мои пользователи могли выбирать продукт и выбирать количество, но проблема, с которой я сталкиваюсь, заключается в том, что если я назначу сериализатор продукта для продукта и установлю read_only = True, то пользователь не сможет выбрать нужный продукт, а если я установлю write_only = True, то пользователь сможет измените другие поля в модели продукта, если я не назначу класс сериализатора продукта полю продукта, они смогут выбрать свой продукт, но в конечной точке API будет отображаться только идентификатор продукта, а не имя продукта. все, что я хочу, это чтобы пользователь мог выбрать имя_продукта и увидеть цену для каждого элемента, пожалуйста, мне нужна помощь в исправлении этого, ниже приведены классы моей модели и сериализатора
СЕРИАЛИЗАТОР CARTLIST
class CartListSerializer(serializers.ModelSerializer):
product = ProductListSerializer( many=True )
user = Userserializer(read_only=True)
class Meta:
model = CartList
fields = ('user', 'product', 'quantity',)
def create(self, validate_data):
product_data = validate_data.pop('product')
cart = CartList.objects.create(**validate_data)
for product in product_data:
Product.objects.create(cart=cart, **product)
return cart
СЕРИАЛИЗАТОР ПРОДУКТА
class ProductListSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ('name', 'price', )
МОДЕЛЬ ПРОДУКТА
class Product(models.Model):
name = models.CharField(max_length=150, blank=True)
price = models.DecimalField(max_digits=9, decimal_places=2)
slug = models.SlugField(max_length=150, blank=True)
available = models.BooleanField(default=False)
catergory = models.ForeignKey('Category', on_delete=models.CASCADE)
manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE)
def __str__(self):
return self.name
def get_product_name(self):
return self.name
МОДЕЛЬ КОРЗИНЫ
class CartList(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now_add=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
def __str__(self):
return self.user.email
def get_total_price(self):
total_price = self.quantity * self.product.price
return total_price