Я создаю веб-сайт на основе базы данных с использованием фреймворка Django.Веб-сайт является интерфейсом для базы данных, которая содержит различные вопросы и ответы по физике.Цель базы данных состоит в том, чтобы организовать эти вопросы в соответствии с темой и получить их на веб-сайте в соответствии с данными, внесенными пользователем.
Первый вход - это форма выбора с 16 темами.Второй вход представляет собой форму выбора с двумя типами вопросов (решение проблем и несколько вариантов).Третий вход - это радио-флажки для вопросов с ответами или без ответов.Четвертый ввод - это форма выбора с разными номерами от 10 до 50 (по 10 шагов между каждым), чтобы определить количество требуемых вопросов.
Я уже создал сайт и базу данных.Что вызывает у меня проблемы, так это формы и модельные формы.Я читал и резюмировал документацию по Django, чтобы понять функциональные возможности Django.
Я хотел бы узнать мнение экспертов о том, где я нахожусь в процессе, и какие источники я могу прочитать, чтобы достичь своей цели.
Я пробовал разные источники, но поскольку я не сосредоточился на изучении, а на создании проекта, я потратил много времени, поэтому я анализировал документацию Django в болееправильный путь.
Это мой models.py
, где я создал четыре classes
и связал их вместе.Пожалуйста, скажите мне, если эта модель достигает моей цели.
from django.db import models
from home.choices import *
# Create your models here.
class Topic(models.Model):
topic_name = models.IntegerField(
choices = question_topic_name_choices, default = 1)
def __unicode(self):
return u'%s' % self.topic_name
class Image (models.Model):
image_file = models.ImageField()
def __unicode(self):
return u'%s' % self.image_file
class Question(models.Model):
questions_type = models. IntegerField(
choices = questions_type_choices, default = 1)
question_topic = models.ForeignKey( 'Topic',
on_delete=models.CASCADE,
blank=True,
null=True)
question_description = models.TextField()
question_answer = models.ForeignKey( 'Answer',
on_delete=models.CASCADE,
blank=True,
null=True)
question_image = models.ForeignKey( 'Image',
on_delete=models.CASCADE,
blank=True,
null=True)
def __unicode(self):
return u'%s' % self.question_description
class Answer(models.Model):
answer_description = models.TextField()
answer_image = models.ForeignKey( 'Image',
on_delete=models.CASCADE,
blank=True,
null=True)
def __unicode(self):
return u'%s' % self.answer_description
Это мой forms.py
, и я знаю, что он написан, вероятно, не полностью, поэтому я прошу о помощи, что мне нужночитать и учиться делать то, что я хочу.
from django import forms
from betterforms.multiform import MultiModelForm
from .models import Topic, Image, Question, Answer
class TopicForm(forms.ModelForm):
topic_name = forms.ModelMultipleChoiceField(
queryset = Topic.objects.all(),
widget = forms.SelectMultiple(
attrs = {'class': ''}
))
class Meta:
model = Topic
fields = ['topic_name',]
class QuestionForm(forms.ModelForm):
question_type = forms.ModelChoiceField(
queryset = Topic.objects.all(),
widget = forms.Select(
attrs = {'class': ''}
))
class Meta:
model = Question
fields = ['questions_type',]
class QuizMultiForm(MultiModelForm):
form_classes = {
'topics' : TopicForm,
'questions' : QuestionForm
}
def __str__(self, args, kwargs):
return '%s %s' %(self.topic_name)
Это мой views.py
, и самая большая проблема здесь, я понял, как работают представления, но я не знаю, как применить некоторые изправила, в основном правила Python.
from django.shortcuts import render, render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic import CreateView
from home.models import Topic, Image, Question, Answer
from home.forms import QuizMultiForm
class QuizView(CreateView):
form_classes = QuizMultiForm
template_name = 'index.html'
def form_valid(self, form_classes):
return super().form_valid(form_classes)
Это мой urls.py
, и я не уверен, что у меня здесь проблема.
from django.contrib import admin
from django.urls import path, include
from home.views import QuizView
from ask.views import ask_page_view as ask_page_url
from download.views import download_view as download_url
urlpatterns = [
path('admin/', admin.site.urls),
path('ask/', ask_page_url, name = 'ask_page'),
path('home/', QuizView.as_view(), name = 'home_page'),
path('download/', download_url, name = 'download_page'),
]
Это изображение, которое у меня естьвзято с моего сайта, но этот построен только с использованием HTML и CSS, что означает, что он не работает
![enter image description here](https://i.stack.imgur.com/OJjEF.png)