В процессе разработки своего тренировочного проекта появилась потребность реализовать следующий сценарий для ввода параметром n количества деталей в БД.
Страница должна представлять собой произвольный набор форм для ввода информации по каждой детали.
Форма для каждого изделия представляет собой набор статических полей (серийный номер, дата, тип и тд) и набор динамического набора полей характеристик, зависящего от типа изделия.
Примерная визуализация задумки:
Более опытных коллег прошу помочь навести на путь истинный в следующих вопросах:
1) Как динамически менять формсет представляющий собой форму для каждой детали в зависимости от выбора в поле type.
2) Как сделать формсет, формсетов, для добавления произвольного количества "строк" в форму.
Кусочек models.py для сценария:
class Product_2_characteristic(models.Model):
product_id = models.ForeignKey('Product',on_delete=models.DO_NOTHING)
characteristic_of_product_id = models.ForeignKey('Characteristic_of_product', on_delete=models.DO_NOTHING)
operation_history_id = models.ForeignKey('Operation_history', on_delete=models.DO_NOTHING)
value = models.CharField(max_length=255)
def get_absolute_url(self):
# Беру по полю оперейшин_хистори для удобства
return reverse('product_2_characteristic-detail', args=[str(self.operation_history_id_id)])
class Product(models.Model):
serial_number = models.CharField(max_length=255)
type_of_product_id = models.ForeignKey('Type_of_product', on_delete=models.DO_NOTHING)
Assembly = models.ManyToManyField('Product')
def get_absolute_url(self):
return reverse('product-detail', args=[str(self.id)])
class Operation_history(models.Model):
start_date = models.DateTimeField(auto_now_add=True)
end_date = models.DateTimeField(auto_now_add=True)
type_of_operation_id = models.ForeignKey('Type_of_operation', on_delete=models.DO_NOTHING)
type_of_defect_id = models.ForeignKey('Type_of_defect', on_delete=models.DO_NOTHING)
employess_id = models.ForeignKey('Employess', on_delete=models.DO_NOTHING)
class Type_of_operation(models.Model):
label = models.CharField(max_length=255)
class Type_of_defect(models.Model):
label = models.CharField(max_length=255)
К сожалению, задача поставила меня в тупик и внятных вариантов в части views и forms я предоставить не могу.
Крайне сочувствую вам, что вы наткнулись на туже задачу, что я пару месяцев назад.
Решения из коробки - нет.
Для формсетов с формсетами можете попробовать это либо это (может одно и тоже, смотрел про примерным признакам, знакомому коду), либо пишите сами, указывая префиксы вложенных формсетов вмсесте с префиксами рожительских. Много JS кода будет для динамического добавления.
Что касается разных наборов полей, могу посоветовать либо подгружать их через AJAX и вставлять в HTML, запрашивая нужный тип формы (будет много форм), либо делать как ModelForm и собирать форму динамически. Поля и их тип можно хранить в БД в JSON (в принципе можно все так хранить, но полагаю вам нужно потом работать с этими объектами, так что для каждой модели своя таблица, а формы для них в JSON в отдельной таблице)
Вот кстати хороший, но древний вариант для динамической формы (https://habr.com/ru/post/46845/)
В принципе, вашу задачу можно решить, написав много JS и AJAX, постоянно подменивая формы и отправляя их по AJAX на свой URL для сохранения
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть среда для разработки сайтов
Не нашел ни одного удобного решенияЯ представляю, что нужно делить на 10, 100, 1000, … , но надеюсь, что есть уже стандартная функция, которая позволит...
Не могу понять как работает этот код? Мы в цикле for создаём переменную cur и в условии проверяем ее наличие в объекте oНо ее там нет, условие должно...
Суть проблемы в том, что не рисуется ничего в canvasВ атрибут функции image1 передаю src и в консоли получаю "вход: (тут base64 изображения входного)",...