Я разрабатываю систему управления недвижимостью, прямо сейчас я работаю над приложением под названием «Проверка свойств», которое в основном сохраняет информацию о проверках, проведенных в отношении некоторых свойств.
Полезный пользователь сказал мне, что я могу добиться этого с помощью наборов форм. Я пытаюсь создать набор форм с моей моделью TaskCheck. Каждый TaskCheck имеет определенную задачу, которая принадлежит одному свойству. Итак, вот что я создал:
views.py
def add_taskcheck(request, property_pk, pk):
tasks = Task.objects.filter(property=property_pk)
tasks_list = Task.objects.filter(property=property_pk).values('task')
TaskCheckFormset = formset_factory(TaskCheckForm, extra=0)
if request.method == 'POST':
#do something
else:
formset = TaskCheckFormset(initial=task_list)
context = {
'title':"Add Property Check",
'task':tasks,
'reference':property_pk,
'formset':formset,
}
return render(request, 'propertycheck/add-taskcheck.html', context)
Моя форма выглядит так:
В этом случае Задача "Диваны: Проверка" не относится к свойству экземпляра, поэтому ее там быть не должно, а поле Задача должно быть предварительно заполнено как исходные данные.
Насколько я знаю из того, что я прочитал здесь я должен передать исходные данные в виде списка dict. Поэтому я создал «tasks_list» с .values() и попытался передать его как начальный:
tasks_list = Task.objects.filter(property=property_pk).values('task')
formset = TaskCheckFormset(initial=task_list)
Итак, мои вопросы:
Как я могу предварительно заполнить эти поля задачами набора запросов?
Как ограничить количество строк количеством объектов задач набора запросов?
Во-первых, мне нужно отфильтровать объекты Task, которые принадлежат определенному свойству.
Я пытался использовать наборы моделей, но не смог передать исходные данные. Я также прочитал этот вопрос, но я могу не инициируйте его внутри форм.
Мои модели.py:
class Task(models.Model):
task = models.CharField(max_length=100)
category = models.ForeignKey(Categories)
property = models.ManyToManyField(Property)
class TaskCheck(models.Model):
status = models.CharField(choices=STATUS_CHOICES, default='nd', max_length=50)
image = models.ImageField(upload_to='task_check', blank=True, null=True)
notes = models.TextField(max_length=500, blank=True)
task = models.ForeignKey(Task)
property_check = models.ForeignKey(Propertycheck)
formset_factory(TaskCheck, , form=TaskCheckForm, extra=0)
должен выдать ошибку, так как вы передаете ему модель. Вы должны использоватьmodelformset_factory
. - person dirkgroten   schedule 30.12.2019