2
我想写网络商店,和我有一个模型Order
:保存对象的列表作为一个字段
class Order(models.Model):
state_choices = ('ACTIVE', 'COMPLETED', 'FROZEN')
order_date = models.DateTimeField(auto_now_add=True)
delivery_time = models.CharField(max_length=100)
address_city = models.CharField(max_length=40)
address_street = models.CharField(max_length=40)
address_building = models.CharField(max_length=40)
state = models.CharField(max_length=200, default='ACTIVE')
products = models.ForeignKey(OrderProduct)
client = models.ForeignKey(CustomUser)
而且OrderProduct
:
class OrderProduct(models.Model):
product = models.ForeignKey(Product)
product_ammount = models.IntegerField()
,你可以看到,用户可以添加以订购不同的产品和每个产品的不同数量。因此,对于目前的型号,我可以添加只订购一种类型的产品。然后我把它改写在未来的方式:
class Order(models.Model):
state_choices = ('ACTIVE', 'COMPLETED', 'FROZEN')
order_date = models.DateTimeField(auto_now_add=True)
delivery_time = models.CharField(max_length=100)
address_city = models.CharField(max_length=40)
address_street = models.CharField(max_length=40)
address_building = models.CharField(max_length=40)
state = models.CharField(max_length=200, default='ACTIVE')
client = models.ForeignKey(CustomUser)
class OrderProduct(models.Model):
product = models.ForeignKey(Product)
order = models.ForeignKey(Order)
product_ammount = models.IntegerField()
而且在view
,当我需要得到用户的订单,我只是做下一个:Order.objects.get(client=request.user).orderproduct_set
但我认为这是不正确的。如何重建这些模型以获得期望的结果?
@sthzg,在哪里可以节省产品数量?据我所知,用'ManyToMany',我不需要'OrderProduct'模型。那么如何在'order'中保存一个'product'的ammount?或者''OrderProduct'中的'ManyToMany'用于'order'字段? – Andrew
对不起,第二次以为这是正确的。 'manytomany'是可能的,但它不是一个很好的解决方案(因为'OrderProduct'的一个实例只能和一个'Order'有关。 – sthzg
第二种方法的一个小问题是查询使用'get()'而不是如果一个用户有多个订单,这可能会导致异常,否则它看起来很好。 – sthzg