Одна вещь, которую вы можете сделать, это перебрать список элементов и установить атрибут value входного тега каждого поля в form.field_name.value
я есть представление на основе класса (IndexView вviews.py), которая показывает таблицу со всеми данными, хранящимися в базе данных. Это представление отображается вindex.html с помощьюdef get_queryset(self)
получить все данные. Проблем пока нет.
Трудной частью для меня является попытка сделать это с помощью формы, чтобы иметь возможность изменять и сохранятьколичество колонка. У меня нет проблем с частью POST, где я использую AJAX для сохранения новых значений. У меня проблемы с получением начальных значений из базы данных для заполнения формы Django (forms.py)
Я пытался с помощьюinitial
аргумент в определении полей формы (вforms.py), даже переопределяя__init__
при определении формы,но я не знаю, как получить "одно значение", Я имею в виду, что чем ближе я был на моих тестах, тем большеMultipleChoiceField с участием:forms.ModelMultipleChoiceField(queryset=Item.objects.order_by('code__name'))
(достижение поля с множественным выборомItem object (1), Item object (2), etc.
)
Но как вы заполняете одинIntegerField или жеCharField с содержимым базы данных для отображения поля таблицы на основе формы в шаблоне?
Я пытаюсь сначала с одним элементом (чтобы понять, как ссылаться на один элемент / значение, чтобы заполнить их с помощью базы данных), прежде чем делать это со всей таблицей:
index.hml:
...
<form class='my-ajax-form' method='POST' action='.' data-url='{{ request.build_absolute_uri|safe }}'>
{% csrf_token %}
{{form.as_table|safe}}
<button type='submit'>Save changes</button>
</form>
...
models.py:
class Code(models.Model):
name = models.CharField(max_length=6)
description = models.CharField(max_length=100)
def __str__(self):
return self.name
class Item(models.Model):
code = models.ForeignKey(Code, on_delete=models.DO_NOTHING)
amount = models.IntegerField(default=0)
forms.py:
class ItemForm(forms.Form):
code = forms.CharField(max_length=6)
description = forms.CharField(max_length=100)
amount = forms.IntegerField()
views.py:
class IndexView(generic.ListView, AjaxFormMixin, FormView):
template_name = 'inventory/index.html'
context_object_name = 'items_list'
form_class = ItemForm
def form_invalid(self, form):
...
def form_valid(self, form):
...
def get_queryset(self):
...
Я проверил эти документы и некоторые похожие старые проблемы, но я попробовал некоторые из предложений / примеров безуспешно:
https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#a-full-examplehttps://www.webforefront.com/django/formprocessing.htmlПредварительно заполненные формы ДжангоЗаполните форму Django с данными из базы данных в представленииЯ использую Django 2.0.2
Любая помощь будет оценена. Заранее спасибо.
РЕДАКТИРОВАТЬ: Попытка сделать что-то с помощью UpdateView, как предлагает Энди. Добавлено (пытается получить одно значение по идентификатору):
class ItemUpdate(UpdateView):
form_class = JoinForm
def get_object(self,queryset=None):
obj = Item.objects.get(id=self.kwargs['2'])
return obj
И указал URL дляpath('', views.ItemUpdate.as_view(), name='index')
но всегда получаюKeyError: '2'