Я создаю приложение для сбора обратной связи от пользователей на django. Вопрос заключается в том, как связать модель с html-формой, используя django widgets и ModelForm?
Моя модель: models.py
class Feedback(models.Model):
user_name = models.CharField(max_length=50)
rate = models.IntegerField()
views.py
from django.shortcuts import render
from django.views import View
from .forms import FeedbackForm
class Survey(View):
def get(self, request):
form = FeedbackForm()
return render(request, 'form/index.html', context={'form': form)
Форма django: forms.py
from django import forms
from .models import Feedback
class FeedbackForm(forms.ModelForm):
class Meta:
model = Feedback
fields = ['rate']
widgets = {
'rate': forms.RadioSelect(attrs={'name': 'rating'}}
Часть html-формы: index.html
<h1 class="form-header">Насколько вероятно Вы порекомендуете инструмент?</h1>
<div class="rating-wrapper">
<label class="radio-container">1
<input type="radio" name="rating" value="1">
<span class="radio-checkmark"></span>
</label>
<label class="radio-container">2
<input type="radio" name="rating" value="2">
<span class="radio-checkmark"></span>
</label>
<label class="radio-container">3
<input type="radio" name="rating" value="3">
<span class="radio-checkmark"></span>
</label>
</div>
Каким образом я могу определить атрибуты для виджета, чтобы генерировался такой же html-шаблон? И соответственно, каким образом я могу итерироваться по полю rate в html-шаблоне, чтобы генерировалось, например, 10 радиокнопок? Т.е., получается что при выборе определенной радиокнопки её значение должно записываться в поле rate модели Feedback.
Буду благодарен за любую помощь. Заранее спасибо!
Для того, чтобы можно было итерироваться по полю rate надо добавить атрибут choices в конструктор класса RadioSelect и определить возможные варианты выбора, т.е. форма будут выглядеть следующим образом:
from django import forms
from .models import Feedback
class FeedbackForm(forms.ModelForm):
class Meta:
model = Feedback
fields = ['rate']
choices = ((1, 1), (2, 2),)
widgets = {'rate': forms.RadioSelect(attrs={'name': 'rating'}, choices=choices)}
В html-шаблоне:
<h1 class="form-header">Насколько вероятно Вы порекомендуете инструмент </h1>
<div class="rating-wrapper">
{% for radio in form.rate %}
<label for="{{ radio.id_for_label }}" class="rating-wrapper">
{{ radio.choice_label }}
{{ radio.tag }}
<span class="radio-checkmark"></span>
</label>
{% endfor %}
</div>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Доброго всем времени суток, столкнулся с неожиданной для себя проблемой, хотелось бы понять причины такого поведения
Прошу прощения сразу, вопрос наверно банальный, но к сожалению не для меняЕсть сайт на ворпресе
Как сделать, чтобы при такой верстке, контент (во втором примере) не влиял на ширину элементов и при этом сохранялась "резиновость"
Как в Bootrstrap 4 выровнять вертикально по центру кнопку внутриcol?