У меня есть простые модели заказа и продукта. Они имеют отношение 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")