如何在Django中用Product模型中的字段填充OrderItem模型



我正在使用ModelViewSet和序列化程序来查看我的订单和产品。因此,在我的产品模型的管理面板中,我已经添加了产品、价格和每磅价格。例如(香蕉,2.00,2.99(。

class Product(models.Model):
name = models.CharField(max_length=70)
price = models.DecimalField(max_digits=10, decimal_places=2)
price_per_pound = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
category = models.ForeignKey(Categories, related_name='products', on_delete=models.CASCADE)
def __str__(self):
return self.name

在我的OrderItem模型中,我可以选择可用的产品,但当我选择香蕉时,我希望价格和price_per_pound字段自动填充我的产品模型中的内容,例如(2.00,2.99(。我该如何处理?

class OrderItem(models.Model):
order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
product = models.ForeignKey(Product, related_name='+', on_delete=models.CASCADE)
price = models.DecimalField(Product.price) # Tried this way, but doesn't work.
price_per_pound = models.ForeignKey(Product, related_name='product_price_per_pound', on_delete=models.CASCADE) # this still only give me the field names of my product
quantity = models.PositiveIntegerField(default=1)
ready = 1
on_its_way = 2
delivered = 3
STATUS_CHOICES = (
(ready, 'ready'),
(on_its_way, 'on its way'),
(delivered, 'delivered'),
)
status = models.SmallIntegerField(choices=STATUS_CHOICES)

最好的方法是为OrderItem类编写一个自定义模型序列化程序,并通过外键product添加一个指向price字段的字段,如下所示:

class OrderItemSerializer(ModelSerializer):
price = DecimalField(source='product.price')
class Meta:
model = OrderItem
fields = ('price', 'quantity')

如果需要的话,只需要将模型中的更多字段添加到Meta类的fields属性中。对于price_per_pound字段,您可以创建类似于price的字段。最后,您应该将视图集配置为使用此序列化程序。

如果将字段添加到模型类中,则会复制数据并将其放在数据库中的两个位置。你通常想避免这种情况。

最新更新