DRF:在具有 'ManyToMany' 字段和 'through' table 的模型中创建新对象
DRF: creating new object in a model with 'ManyToMany' field and 'through' table
我有以下 Django 模型:
class Product(models.Model):
name = models.CharField(max_length=250, unique=True)
quantity = models.IntegerField(default=0)
class Order(models.Model):
products = models.ManyToManyField(
Product,
through='PositionInOrder'
)
discount = models.CharField(max_length=50, blank=True)
total_sum = models.DecimalField(max_digits=11, decimal_places=2, default=0)
class PositionInOrder(models.Model):
sale = models.ForeignKey(Order)
product = models.ForeignKey(Product)
quantity = models.PositiveIntegerField()
price = models.PositiveIntegerField()
以及以下序列化器:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class PositionInOrderSerializer(serializers.HyperlinkedModelSerializer):
sale = serializers.ReadOnlyField()
product = serializers.ReadOnlyField()
class Meta:
model = PositionInOrder
fields = "__all__"
class OrderSerializer(serializers.ModelSerializer):
products = PositionInOrderSerializer(many=True)
def create(self, validated_data):
products = validated_data.pop('products')
order = Order.objects.create(**validated_data)
return order
class Meta:
model = Order
fields = '__all__'
我想创建新订单。发送包含此 json:
的 post 查询
{
"products": [{"id": 2606, "name": "Some name", "quantity": 140, "price": 250}],
"discount": "15",
"total_sum": 500
}
并且在 class OrderSerialization 的 create() 方法中我获得了 products=: [OrderedDict([('quantity', 140), ('price', 250)] )] 并且没有关于 product_id 和 product_name 的信息。我怎样才能得到它们?
尝试在 PositionInOrderSerializer
中明确定义 id
和 name
字段:
class PositionInOrderSerializer(serializers.HyperlinkedModelSerializer):
sale = serializers.ReadOnlyField()
id = serializers.IntegerField(source='product.id')
name = serializers.IntegerField(source='product.name')
class Meta:
model = PositionInOrder
fields = "__all__"
我有以下 Django 模型:
class Product(models.Model):
name = models.CharField(max_length=250, unique=True)
quantity = models.IntegerField(default=0)
class Order(models.Model):
products = models.ManyToManyField(
Product,
through='PositionInOrder'
)
discount = models.CharField(max_length=50, blank=True)
total_sum = models.DecimalField(max_digits=11, decimal_places=2, default=0)
class PositionInOrder(models.Model):
sale = models.ForeignKey(Order)
product = models.ForeignKey(Product)
quantity = models.PositiveIntegerField()
price = models.PositiveIntegerField()
以及以下序列化器:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class PositionInOrderSerializer(serializers.HyperlinkedModelSerializer):
sale = serializers.ReadOnlyField()
product = serializers.ReadOnlyField()
class Meta:
model = PositionInOrder
fields = "__all__"
class OrderSerializer(serializers.ModelSerializer):
products = PositionInOrderSerializer(many=True)
def create(self, validated_data):
products = validated_data.pop('products')
order = Order.objects.create(**validated_data)
return order
class Meta:
model = Order
fields = '__all__'
我想创建新订单。发送包含此 json:
的 post 查询{
"products": [{"id": 2606, "name": "Some name", "quantity": 140, "price": 250}],
"discount": "15",
"total_sum": 500
}
并且在 class OrderSerialization 的 create() 方法中我获得了 products=: [OrderedDict([('quantity', 140), ('price', 250)] )] 并且没有关于 product_id 和 product_name 的信息。我怎样才能得到它们?
尝试在 PositionInOrderSerializer
中明确定义 id
和 name
字段:
class PositionInOrderSerializer(serializers.HyperlinkedModelSerializer):
sale = serializers.ReadOnlyField()
id = serializers.IntegerField(source='product.id')
name = serializers.IntegerField(source='product.name')
class Meta:
model = PositionInOrder
fields = "__all__"