переопределение метода create () в django rest - PullRequest
0 голосов
/ 09 июня 2018

models.py

class Product(models.Model):
    product_name = models.CharField(max_length=32)
    quantity = models.IntegerField()
    remarks = models.TextField(blank=True)

class Customer(models.Model):
    customer_name = models.CharField(max_length=50)
    address = models.CharField(max_length=100)
    bill_no = models.CharField(max_length=8)
    product = models.ManyToManyField(Product)

class Sell(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    date = models.DateField(auto_now_add=True)
    total = models.IntegerField()
    vat = models.IntegerField()

serializers.py

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'

class CustomerSerializer(serializers.ModelSerializer):
    product = ProductSerializer(many=True, read_only=False)
    class Meta:
        model = Customer
        fields = '__all__'

class SellSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sell
        fields = '__all__'

И после сериализаторов и представлений я получаю это при просмотре ввода ввода sell.

  1. Как мне автоматически подключить объект Customer к Sell, чтобы мне не нужно было выбирать объекты customer?Используя токен или какую-либо идею?
  2. Также как переопределить метод create () в сериализаторе клиента для добавления сведений о товарах из представления клиента? enter image description here

1 Ответ

0 голосов
/ 09 июня 2018

Если вам нужно автоматически передать клиента в сериализатор продаж.Вы можете передать его в метод сохранения сериализатора в представлении:

serializer.save(customer=request.user)

Вам необходимо исключить поле customer из сериализатора:

class SellSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sell
        exclude = ('customer',)

Для сохранениявложенные product вы можете сохранить все новые продукты в списке и затем передать этот список методу product.add():

class CustomerSerializer(serializers.ModelSerializer):
    product = ProductSerializer(many=True, read_only=False)
    class Meta:
        model = Customer
        fields = '__all__'

    def create(self, validated_data):
        product_data = validated_data.pop('product')
        customer = Custome.objects.create(**validated_data)
        product_lits = [] 
        for product_details in product_data:                    
            product_list.append(Product.objects.create(**product_details))
        customer.product.add(*product_list)
        return customer
...