Django模型定义多对多场
我有以下情况:Django模型定义多对多场,django,database-design,django-models,django-admin,many-to-many,Django,Database Design,Django Models,Django Admin,Many To Many,我有以下情况: class Product(models.Model): name = models.CharField(max_length=200) class Order(models.Model): product = models.ManyToManyField(Product) quantity = models.IntegerField(default=0,validators=[MinValueValidator(1)]) 在admin.py中 cla
class Product(models.Model):
name = models.CharField(max_length=200)
class Order(models.Model):
product = models.ManyToManyField(Product)
quantity = models.IntegerField(default=0,validators=[MinValueValidator(1)])
在admin.py中
class ProductsInline(admin.TabularInline):
model = Order.product.through
class OrderAdmin(admin.ModelAdmin):
inlines = [ProductsInline,]
filter_horizontal = ('product',)
我想在创建一个订单时为每个产品输入不同的数量,但对于这种型号,这是不可能的。每个订单只能插入一个数量
我想创建一个包含产品及其数量的中间类ProductQuantity,然后将其添加到订单中,但我不知道在创建订单时是否可以“动态”创建ProductQuantity
我想不出任何解决办法,有人能帮我吗?我不确定我是否了解你的问题。这能解决你的问题吗
class Product(models.Model):
name = models.CharField(max_length=200)
class Order(models.Model):
customer = models.ForeignKey(Customer)
class OrderItem(models.Model):
order = models.ForeignKey(Order)
product = models.ManyToManyField(ProductQuantity)
quantity = models.IntegerField(default=0,validators=[MinValueValidator(1)])
编辑:
使用上述模型,您可以创建以下订单:
Products:
+----+--------+
| id | name |
+----+--------+
| 1 | apple |
| 2 | orange |
| 3 | banana |
+----+--------+
Order:
+----+-------------+
| id | customer_id |
+----+-------------+
| 1 | 112 |
| 2 | 99 |
+----+-------------+
OrderItem:
+----+-------+---------+----------+
| id | order | product | quantity |
+----+-------+---------+----------+
| 1 | 1 | 1 | 10 |
| 2 | 1 | 2 | 20 |
| 3 | 1 | 3 | 30 |
| 4 | 2 | 1 | 5 |
+----+-------+---------+----------+
有两个不同客户的两份订单,一份是10个苹果、20个桔子和30个香蕉。还有第二道菜,只有一道5个苹果。我不确定是否收到你的问题。这能解决你的问题吗
class Product(models.Model):
name = models.CharField(max_length=200)
class Order(models.Model):
customer = models.ForeignKey(Customer)
class OrderItem(models.Model):
order = models.ForeignKey(Order)
product = models.ManyToManyField(ProductQuantity)
quantity = models.IntegerField(default=0,validators=[MinValueValidator(1)])
编辑:
使用上述模型,您可以创建以下订单:
Products:
+----+--------+
| id | name |
+----+--------+
| 1 | apple |
| 2 | orange |
| 3 | banana |
+----+--------+
Order:
+----+-------------+
| id | customer_id |
+----+-------------+
| 1 | 112 |
| 2 | 99 |
+----+-------------+
OrderItem:
+----+-------+---------+----------+
| id | order | product | quantity |
+----+-------+---------+----------+
| 1 | 1 | 1 | 10 |
| 2 | 1 | 2 | 20 |
| 3 | 1 | 3 | 30 |
| 4 | 2 | 1 | 5 |
+----+-------+---------+----------+
有两个不同客户的两份订单,一份是10个苹果、20个桔子和30个香蕉。第二个订单只有一个5个苹果。我想要实现的是,当我创建订单时,我可以定义订单中每个产品的数量。上述示例中定义的数量在订单中为“通用”。例如,我想创建一个10个苹果、20个桔子和30个香蕉的订单。@thodoris那么我想我正确理解了你的问题。我添加了一个示例,说明这样的顺序在生成的sql表中的外观。但是,如果我使用管理员创建订单,我必须经过许多步骤,首先创建订单,然后为该订单创建尽可能多的OrderItems,这对用户来说不是很友好。我的想法是将OrderItem按顺序添加为多个字段。但是,在管理界面中,这将链接到一个已经生成的OrderItem。我想要实现的是“动态”生成OrderItem。产品已经存在,但在下订单时应引入数量。将OrderItems定义为多个没有意义,一个OrderItem只能属于一个订单。如果您需要最大的可用性,管理后端无论如何都不是创建订单的正确位置。制作一个前端掩码,第一步是创建订单(指定客户),然后在以下步骤中添加OrderItems。我想要实现的是,当我创建订单时,我可以定义订单中每个产品的数量。上述示例中定义的数量在订单中为“通用”。例如,我想创建一个10个苹果、20个桔子和30个香蕉的订单。@thodoris那么我想我正确理解了你的问题。我添加了一个示例,说明这样的顺序在生成的sql表中的外观。但是,如果我使用管理员创建订单,我必须经过许多步骤,首先创建订单,然后为该订单创建尽可能多的OrderItems,这对用户来说不是很友好。我的想法是将OrderItem按顺序添加为多个字段。但是,在管理界面中,这将链接到一个已经生成的OrderItem。我想要实现的是“动态”生成OrderItem。产品已经存在,但在下订单时应引入数量。将OrderItems定义为多个没有意义,一个OrderItem只能属于一个订单。如果您需要最大的可用性,管理后端无论如何都不是创建订单的正确位置。制作前端掩码,第一步创建订单(指定客户),然后在以下步骤中添加OrderItems。