Имеют ли смысл эти отношения "многие-ко-многим"?

Я пишу приложение для django и у меня есть следующие модели, однако я не уверен в связи между order_id и product_id в DetailedOrder и customer_id в модели Demand.

В модели DetailedOrder может быть несколько order_id (O0001), если клиент заказывает несколько product_id. Тогда идентификатор заказа может быть использован в модели Order для поиска клиента.

Или должен ли product_id в DetailedOrder быть отношением многие ко многим, потому что может быть несколько продуктов для 1 order_id - я думаю, это имеет больше смысла.

Также по этой логике, означает ли это, что customer_id в Ordermodel должен быть отношением "многие ко многим", потому что может быть несколько customer_ids к нескольким order_ids?

Любой совет приветствуется!

class Customer(models.Model):
    customer_id = models.CharField(primary_key=True, max_length=150)
    customer_name = models.CharField(max_length=150, null=True)

class Product(models.Model):
    product_id = models.CharField(primary_key=True, max_length=100)
    product_name = models.CharField(max_length=150)

class Order(models.Model):
    order_id = models.CharField(primary_key=True, max_length=100)
    customer_id = models.ForeignKey(Customer, null=True, on_delete= models.SET_NULL)


class DetailedOrder(models.Model):
    order_id = models.ForeignKey(Demand, null=True, on_delete= models.SET_NULL)
    product_id = models.ForeignKey(Product, null=True, on_delete= models.SET_NULL)
    quantity = models.IntegerField()

Ваш DetailOrder действует как сквозная модель ManyToManyField. Вы можете для одного и того же Order иметь несколько DetailedOrder и, таким образом, также ссылаться на несколько Product.

You can also span a ManyToManyField [Django-doc] over this model to effectively find out the Products, with DetailedOrder as the through=… model [Django-doc]:

class Product(models.Model):
    product_id = models.CharField(primary_key=True, max_length=100)
    product_name = models.CharField(max_length=150)

class Order(models.Model):
    order_id = models.CharField(primary_key=True, max_length=100)
    customer_id = models.ForeignKey(Customer, null=True, on_delete= models.SET_NULL)
    products = models.ManyToManyField(
        Product,
        through='DetailedOrder',
        related_name='orders'
    )

class DetailedOrder(models.Model):
    order = models.ForeignKey(Order, null=True, on_delete= models.SET_NULL)
    product = models.ForeignKey(Product, null=True, on_delete= models.SET_NULL)
    quantity = models.IntegerField(default=1)

Примечание: Обычно не добавляют суффикс …_id к полю ForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом …_id. Поэтому он должен быть product, вместо product_id.

.
Вернуться на верх