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。