Странный тип "on", записываемый в базу данных MySQL (Navicat Premium) в Django
Я пытался вставить информацию с помощью HTML-формы в свою базу данных. Однако, когда я отправляю форму, мой "gender" и мой "website_rating" были странным образом заменены на "on", в то время как они должны быть заменены моим вводом веб-сайта.
Изображение базы данных: https://i.stack.imgur.com/94d8L.png
Вот мой models.py
# _*_ coding:utf-8 _*_
from __future__ import unicode_literals
from django.db import models
"""
Quick Guide to Model Fields that We Did Not Use:
- models.ForeignKey()
- models.DateTimeField()
- models.IntegerField()
- models.IPAddressField()
- models.FileField()
- models.ImageField()
"""
# Create your models here.
class PersonalInfoResponse(models.Model):
# Personal Info Section
name = models.CharField(max_length=30, null=True, default="N/A", verbose_name=u"Name")
age = models.IntegerField(verbose_name=u"Age", default="N/A", null=True)
email = models.CharField(max_length=30, null=True, default="N/A", verbose_name=u"text#@thing.com")
gender = models.CharField(max_length=7, null=True, verbose_name=u"gender")
# Website Response Section
website_rating = models.CharField(max_length=3, verbose_name=u"1-10", null=True)
heardof_flag = models.BooleanField(verbose_name=u"truefalse", null=True)
heardof = models.CharField(max_length=255, null=True, verbose_name=u"How did you know about the C&C Education Center?")
# Misc Section
fav_subject = models.CharField(max_length=50, null=True, default="None", verbose_name=u"truefalse")
fav_website = models.CharField(max_length=255, null=True, default="N/A", verbose_name=u"What is your favorite part about this website?")
website_improve = models.CharField(max_length=255, null=True, default="N/A", verbose_name=u"What is something that this website needs improvement on?")
class Meta:
verbose_name = u"User Contact Info"
verbose_name_plural = verbose_name
А вот мой views.py
from django.shortcuts import render
from django.shortcuts import redirect
from .models import PersonalInfoResponse
# Special Pages
def AfterSubmission(request):
return render(request, 'html/elements/temp.html')
# Create your views here.
def Home(request):
return render(request, 'html/index.html')
def Contact(request):
# all_messages = PersonalInfoResponse.objects.all()
# for message in all_messages:
# print(message.name)
if (request.method == 'POST'):
name = str(request.POST.get('name', ''))
age = int(request.POST.get('age', ''))
email = str(request.POST.get('email', ''))
gender = request.POST.get('gender', '')
website_rating = request.POST.get('rscale', '')
heardof_flag = request.POST.get('ynw', '')
heardof = str(request.POST.get('heardof_res', ''))
fav_subject = str(request.POST.get('subjects', ''))
fav_website = str(request.POST.get('fav_part', ''))
website_improve = str(request.POST.get('improve_part', ''))
# Saves User Input
usermessage = PersonalInfoResponse()
usermessage.name = name if isinstance(name, str) else 0
usermessage.age = age if isinstance(age, int) else 0
usermessage.email = email if isinstance(email, str) else 0
usermessage.gender = gender
usermessage.website_rating = website_rating
usermessage.heardof_flag = (1 if heardof_flag == 'Yes' else 0)
usermessage.heardof = heardof
usermessage.fav_subject = fav_subject
usermessage.fav_website = fav_website
usermessage.website_improve = website_improve
usermessage.save()
return render(request, 'html/contactform.html')
def About(request):
return render(request, 'html/about.html')
# Elements folder
def Register(request):
return render(request, 'html/elements/register.html')
def Login(request):
return render(request, 'html/elements/login.html')
def Classes(request):
return render(request, 'html/elements/classes.html')
"gender" и "website_rating" являются радиовходами HTML. Вот участок моего HTML кода:
Gender:<br>
<input type="radio" name="gender" required="required"> Male
<input type="radio" name="gender" required="required"> Female
<input type="radio" name="gender" required="required"> Other
<br><br>
On a scale of 1~10, how do you rate this website?<br>
<input type="radio" name="rscale" required="required"> 1
<input type="radio" name="rscale" required="required"> 2
<input type="radio" name="rscale" required="required"> 3
<input type="radio" name="rscale" required="required"> 4
<input type="radio" name="rscale" required="required"> 5
<input type="radio" name="rscale" required="required"> 6
<input type="radio" name="rscale" required="required"> 7
<input type="radio" name="rscale" required="required"> 8
<input type="radio" name="rscale" required="required"> 9
<input type="radio" name="rscale" required="required"> 10
Я понятия не имею, что происходит. Кто-нибудь может мне помочь?
Это мой первый вопрос на StackOverFlow, если я что-то упустил, не стесняйтесь критиковать меня.
В ваших входных данных не хватает value
, поэтому, согласно спецификации HTML, вы получаете "on"
, поскольку выбрана радиокнопка.
<input type="radio" name="rscale" required="required" value="1"> 1
<input type="radio" name="rscale" required="required" value="2"> 2
и т.д...
Также, пожалуйста, изучите Django's Forms и ModelForms, вместо того, чтобы делать request.POST
все вручную.
В-третьих, если рейтинг - это число, сделайте его таким:
website_rating = models.IntegerField(verbose_name=u"1-10", null=True)
Если он необходим, сделайте его не нулевым.
website_rating = models.IntegerField(verbose_name=u"1-10")