首页 > 解决方案 > 如何在 django 中实现一对多关系?

问题描述

所以我有一个案例,我必须在 django 中使用一对多关系,我不知道如何使用它。我想实现可能很多的一对多关系order(one) to product(s)。我的代码是这样的:

class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.IntegerField()
    image = models.ImageField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True)
    created_at = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.name

class Order(models.Model):
    order_id = models.CharField(max_length=20)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

标签: pythondjango

解决方案


User在您的情况下, and之间有 M:N 关系Product,因为一个Product可以是多个Orders 的成员,并且Order可以包含多个Products。它被建模为两个 1:N 关系,如下图所示。

    ┌─────────┐
    │ Product │
    │ - name  │◄──┐
    │ - price │   │        ┌───────────────┐
    └─────────┘   └────────┤ Order         │
                           │- <FK> User    │
    ┌─────────┐   ┌────────┤- <FK> Product │
    │ User    │   │        └───────────────┘
    │ - name  │◄──┘
    └─────────┘

https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/

class Order(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True)
    ...

推荐阅读