Как получить поля базы данных внутри формы
Что мне нужно? Мне нужно разместить форму на моей странице, где отображаются все поля из моей базы данных, и вы можете изменить их и сохранить в базе данных. Простой редактор для таблицы моей базы данных.
Что у меня есть?
мой HTML:enter code here
<tr>
<td>{{ form.name }}</td>
<td>{{ form.token }}</td>
<td><button class="btn btn-lg btn-success w-100">Add</button></td>
</tr>
my models.py
from django.db import models
# Create your models here.
class TrafficSources(models.Model):
name = models.CharField('name', max_length=250)
token = models.CharField('token', max_length=250)
def __str__(self):
return self.name
my forms.py
from .models import TrafficSources
from django.forms import ModelForm, TextInput
class TrafficSourcesForm(ModelForm):
class Meta:
model = TrafficSources
fields = ['name', 'token']
widgets = {
'name': TextInput(attrs={
'class': 'form-control',
'placeholder': {{here I need the name from database table}}
}),
'token': TextInput(attrs={
'class': 'form-control',
'placeholder': {{here I need the token from database table}}
})
}
Это view.py для этой страницы
def settings(request):
ts = TrafficSources.objects.all()
form = TrafficSourcesForm()
data = {
'form': form
}
url = 'url for API request'
#
ts_token = TrafficSources.objects.filter(name='propeller')
for h in ts_token:
token = h.token
headers = {'Authorization': 'Bearer ' + token}
res = requests.get(url, headers=headers)
return render(request, 'mainpage/dashboard.html', {'ts': ts, 'js': res.text, 'hd': headers, 'form' : form})
Мои вопросы: 1) Я могу поместить таблицу моей базы данных на HTML-страницу. Я могу создать пустую рабочую форму (с классом). НО я не могу сделать и то и другое в одном месте. 2) Если я хочу иметь возможность сохранять каждое поле в базе данных (отдельно), мне нужна форма в каждой строке или я могу сделать это только из 1 формы на странице?
Для наглядности привожу скриншот, как это должно выглядеть.
Вы можете использовать параметр instance
для передачи объекта форме для его рендеринга. Вы можете попробовать следующим образом:
# view
def settings(request):
...
forms = [TrafficSourcesForm(instance=x) for x in TrafficSources.objects.all()]
return render(request, 'mainpage/dashboard.html', {'ts': ts, 'js': res.text, 'hd': headers, 'forms' : forms})
# template
{% for form in forms %}
<form action="/your-url/{{form.instance.id}}" method="post">
{{ form.as_p }}
<input type="submit" value="OK">
</form>
Больше информации можно найти в документации.