Django 模型定义多对多字段

Django models deifinition many to many field

我有以下情况:

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',)

我想在创建一个订单时为每个产品输入不同的数量,但是对于这个模型这是不可能的。每个订单只能插入一个数量。

我想创建一个包含产品及其数量的中间 class ProductQuantity,然后将其添加到订单中,但我不知道是否可以创建 ProductQuantity "on the fly" 创建订单时。

我想不出任何解决办法,有人可以帮忙吗?

我不确定我是否收到你的问题。这会解决您的问题吗?

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 个苹果。