Как реализовать форму ManyToMany со сквозной моделью и записать несколько отношений одновременно - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть простые модели заказа и продукта. Они имеют отношение M2M, так что Продукт может состоять из нескольких Заказов, а Заказ может иметь несколько Продуктов.

Мне нужна форма для сбора пользователями следующей информации:

  • Список заказываемых продуктов и единиц каждого из этих продуктов.
  • Дата создания заказа
  • Пользователь, сделавший заказ
  • Etc

Насколько я понимаю, мне нужна сквозная модель для записи единиц измерения для каждого продукта, и я согласен с этим, но я понятия не имею, как реализовать ее в формах.py и Views.py, а также ни в html.

Как показать поле «единицы» рядом с каждым из полей «product» MultipleChoice?

Я уже пробовал «добавить форму» для сквозной модели на сайте администратора, но он позволял мне добавлять отношения только один за другим. После поиска в Google мне удалось получить такую ​​форму, но опять же, это не та форма, которую я ищу.

В волшебном сценарии у меня было бы несколько полей формы с TextWidgets с django-autocomplete для поиска в них. для продуктов (по одному полю на категорию продукта, что облегчает поиск материала), а затем все поля объединяются для создания экземпляра модели заказа. Конечно, будет достаточно только одного поля, если я могу записать несколько продуктов в одной форме с полем единиц, соответствующим каждому.

class Product(models.Model):
    nombre = models.CharField(max_length=50, help_text=_('Nombre del producto.'))
    referencia = models.CharField(max_length=20, help_text = _('Referencia del producto.'))
    formato = models.CharField(max_length=40, help_text=_('Ej.: "Caja de 100", "Bolsa de 1000", etc.'))
    marca = models.CharField(max_length=20)

    CATEGORIES = (
        ('a', _('Pipetas serológicas')),
        ('b', _('Puntas micropipeta')),
        ('c', _('Tubos y criotubos')),
        ('d', _('Frascos de cultivo')),
        ('e', _('Guantes')),
        ('f', _('Cortantes')),
        ('g', _('Jeringuillas')),
        ('h', _('Placas y microplacas')),
        ('i', _('Consumible genérico')),
    )

    category = models.CharField(
        max_length=1,
        choices=CATEGORIAS,
        blank=False,
        help_text=_('Categoría del producto.'),
    )

    class Meta:
        verbose_name = _("Producto fungible")
        verbose_name_plural = _("Productos fungible")


class Order(models.Model):
    codigo = models.CharField(max_length=20, blank=True)
    producto = models.ManyToManyField(Product, through='Units')
    autor = models.ForeignKey(User, on_delete=models.SET_NULL, blank = True, null = True)
    fecha = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = _("Pedido fungible")
        verbose_name_plural = _("Pedidos de fungible")


class Units(models.Model):
    producto = models.ForeignKey(Product, on_delete=models.SET_NULL, null = True)
    pedido = models.ForeignKey(Order, on_delete=models.SET_NULL, null = True)
    unidades = models.IntegerField(default=1)

    class Meta:
        verbose_name = _("Unidad fungible")
        verbose_name_plural = _("Unidades fungibles")
...