Посоветуйте по моделированию орм в django

Я создаю веб-приложение, в котором пользователи размещают заказы с вложенной информацией. Мне нужен совет по лучшей практике, чтобы я мог провести дополнительные исследования.

Идея заключается в том, что пользователь либо загружает существующий заказ, либо создает новый заказ. Затем они заполняют последующие поля заказа, которые могут быть по принципу "один ко многим". Моя первоначальная идея заключалась в использовании переменной для order_id и использовании внешнего ключа для связи с экземплярами других классов. Однако это кажется слишком сложным. order_id должен быть уникальным и последовательным. Является ли это лучшим подходом к решению данной проблемы?

class Order(models.Model):
    order_id= xxxx
    created_by = xxxx

class A(models.Model):
    order_id = models.ForeignKey(xxxxx)
    someclassafield = xxxx

class B(models.Model):
    order_id = models.ForeignKey(xxxxx)
    someclassbfield = xxxx

Это даст пользователю возможность создавать такие заказы, как показано ниже:

Order 1
(Class_A, order_id, someclassafield)
(Class_A, order_id, someclassafield)
(Class_A, order_id, someclassafield)
(Class_B, order_id, someclassbfield)

Order 2
(Class_A, order_id, someclassafield)
(Class_A, order_id, someclassafield)
(Class_B, order_id, someclassbfield)
(Class_B, order_id, someclassbfield)

Отвечаю на свой вопрос, вдруг это будет полезно другим. Исходя из исследования, то, что я на самом деле хочу, это отношения один ко многим. Источник:

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

from django.db import models

class Reporter(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    def __str__(self):
        return "%s %s" % (self.first_name, self.last_name)

class Article(models.Model):
    headline = models.CharField(max_length=100)
    pub_date = models.DateField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

    class Meta:
        ordering = ['headline']
Вернуться на верх