在 Django 的 MySQL 数据库(Navicat Premium)中记录了奇怪的"on"类型



我一直在尝试用HTML表单将信息插入数据库。然而,当我提交时,我的";性别";和我的";website_ rating";奇怪地被替换为";在"on"上;,当它应该被替换为我的网站输入时。

数据库图像:https://i.stack.imgur.com/94d8L.png

这是我的型号.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

这是我的观点.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')

";性别";以及";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上的第一个问题,如果我错过了什么,请随时批评我。

您的输入缺少values,因此根据HTML规范,您将获得"on",因为单选按钮已被选中。

<input type="radio" name="rscale" required="required" value="1"> 1
<input type="radio" name="rscale" required="required" value="2"> 2

等等。。。

另外,请查看Django的Forms和ModelForms,而不是手工处理request.POST

第三,如果评级是一个数字,那么就这样做:

website_rating = models.IntegerField(verbose_name=u"1-10", null=True)

如果需要,请使其不可为null。

website_rating = models.IntegerField(verbose_name=u"1-10")

最新更新