Django: Quizapp с моделью вопросов и ответов
Я хотел бы создать приложение викторины с Django. Где вопросы могут храниться в БД, а пользователи могут добавлять дополнительные вопросы в админке. и каждый вопрос может иметь ответ из пользовательского ввода.
Это базовая версия того, что я пробовал до сих пор, Простой пример Моих моделей:
QuestionModel
- ID
- вопрос
- автор
AnswerModel
- ID
- Ответ
- question_id
- автор
Итак, когда я создаю AnswerForm(): он показывает форму, но вопросы отображаются в виде выпадающего списка вместо меток. И он не создает поля для каждого вопроса. Он просто создает одно поле ввода и выпадающий список для вопроса. Я знаю, что он так делает, потому что у меня есть question_id как FK в модели ответа.
Есть ли лучший способ сделать это? Я новичок в Django
Я не силен в django, но я думаю, что вы можете использовать эту структуру:
Модель вопроса:
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=60,)
created_at = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(unique=True, max_length=200)
Модель ответа:
class Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
answer = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
post = models.ForeignKey(Question, on_delete=models.CASCADE)
В ваших представлениях добавьте:
class My_Answer(LoginRequiredMixin, CreateView):
model = Answer
fields = ['answer']
template_name = 'answer.html'
success_url = reverse_lazy('#Redirecting User To The Dashboard')
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.post_id = self.kwargs['pk']
result = super().form_valid(form)
return result
В ваши урлы добавьте:
path('question/<int:pk>/answer/', views.My_Answer.as_view(), name='answer'),
Добавьте это в шаблон ответа:
{% load crispy_forms_tags %}
<form method="POST" action="" enctype="multipart/form-data">
{% csrf_token %}
{{ form | crispy }}
<input type="submit" value="submit" class="btn btn-primary">