как отобразить имя поля в Django Rest Framework Отношение один ко многим - PullRequest
0 голосов
/ 29 февраля 2020

Я работаю над 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
...