Django и HTML - как применить стилизацию к конкретным ответам
Я работаю над проектом Django, где у меня есть форма опроса и соответствующий синтаксис HTML :
<label for="id_form-{{ forloop.counter0 }}-answer">Answer:</label>
{% for answer in answers %}
<label for="id_form-{{ forloop.counter0 }}-answer">
<input type="radio" name="form-{{ forloop.parentloop.counter0 }}-answer" id="id_form-{{ forloop.counter0 }}-answer" value="{{answer.id}}">
{{answer.text}}
{% if answer.image %}
<img src="/static/mysurveys/{{answer.image}}.png">
{% endif %}
</label>
{% endfor %}
Этот синтаксис пока работает нормально, но мой вопрос в том, как я могу избавиться от цикла for, чтобы я мог применять определенные стили к каждому ответу? В этом случае пользователь должен выбрать изображение из группы изображений в качестве ответа, и я просто хочу, чтобы изображения были расположены в контейнере в виде круга. Я пробовал что-то вроде этого:
<label for="id_form-{{ forloop.counter0 }}-answer">Answer:</label>
<div class="circle-container">
<label for= 'id_form-{{ forloop.counter0 }}-answer' class='center'>
<input type="radio" name="form-{{ forloop.parentloop.counter0 }}-answer" id="id_form-{{ forloop.counter0 }}-answer" value="{{answer.id}}">
<img src="/static/mysurveys/female_neutral.png">
</label>
<label for= 'relaxed' class='deg22_5'>
<input type="radio" name="form-{{ forloop.parentloop.counter0 }}-answer" id="id_form-{{ forloop.counter0 }}-answer" value="{{answer.id}}">
<img src="/static/mysurveys/female_relaxed.png">
</label>
Но с этим кодом ответ не записывается в базу данных, и я получаю ошибку, которая гласит: Formset is NOT valid. [{'answer': ['Это поле обязательно']}]. Пожалуйста, сообщите мне о любых идеях по решению этой проблемы. На всякий случай, вот также мои взгляды:
from django.forms import ModelForm
class ResponseForm(ModelForm):
class Meta:
model = Response
fields = ['question', 'answer']
def __init__(self, *args, user=None, **kwargs):
self.user = user
super().__init__(*args, **kwargs)
def save(self, commit=True):
response = super().save(commit=False)
response.user = self.user
return response.save()
def take_questionnaire_fs(request, questionnaire_id):
ResponseFormSet = modelformset_factory(Response, form=ResponseForm, extra=0)
if request.method == 'POST':
formset = ResponseFormSet(request.POST or None, request.FILES, form_kwargs={'user': request.user})
if formset.is_valid():
print("Formset is valid")
formset.save()
return HttpResponseRedirect(reverse ('questionnaires:questionnaire_index'))
else:
print("Formset is NOT valid")
print(formset.errors)
print(formset.non_form_errors())
questionnaire = Questionnaire.objects.get(id=questionnaire_id)
questions = Question.objects.filter(questionnaire_id=questionnaire_id)
answers = Answer.objects.filter(questionnaire_id=questionnaire_id)
return render(request, 'questionnaires/questionnaire_lec.html', {
'questions': questions,
'answers': answers,
'questionnaire': questionnaire,
})
А мои модели:
User = settings.AUTH_USER_MODEL
class Questionnaire(models.Model):
name = models.CharField(max_length=255)
text = models.CharField(max_length=200)
def __str__(self):
return self.name
class Question(models.Model):
text = models.CharField(max_length=200)
questionnaire = models.ForeignKey(Questionnaire, on_delete=models.CASCADE, related_name='questions')
def __str__(self):
return self.text
class Answer(models.Model):
questionnaire = models.ForeignKey(Questionnaire, on_delete=models.CASCADE, related_name='answers', default='')
text = models.CharField(max_length=200)
image = models.CharField(null=True, max_length=20)
def __str__(self):
return self.text
class Response(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
question = models.ForeignKey(Question, on_delete = models.CASCADE)
answer = models.ForeignKey(Answer, on_delete = models.CASCADE)
def __str__(self):
return '%s - %s - %s - %s' % (self.user, self.question, self.answer, self.date)
Спасибо!