我正在研究django中的一个小项目,并且试图采用由用户填写并将其存储在数据库中的表单。对于表单,我正在使用ModelForm而不是标准Form。Django:将默认值添加到ModelForms
用户使用表单创建的组的名称和说明提交表单。在将新对象添加到数据库之前,我想向模型中的表单值添加默认值。
这里是Form.py
from django import forms
from django.forms import ModelForm
from tab.models import Group
member_count_choices = (('bronze', '1-4',),
('silver', '5-7',),
('gold', '8-10',),
('platnium', '11+',))
class CreateGroupForm(forms.ModelForm):
class Meta:
model = Group
fields = ['name', 'description']
这里是views.py
from django.shortcuts import render, get_object_or_404, redirect
from django.db import transaction
from .models import Group, User
from .forms import CreateGroupForm, AddMembersFour, AddMembersSeven
from .forms import AddMembersTen, AddMembersEleven
# the following def is going to be what grabs all of the different groups that
# are in the database
# filters can be added later
def groups(request):
# following is all of th actions that are taken after the form is submitted
if request.method == 'POST':
createGroup = CreateGroupForm(request.POST)
if createGroup.is_valid():
cd = createGroup.cleaned_data
groupName = cd['name']
groupDescription = cd['description']
groupDefaultLevel = 1
groupDefaultStatus = 1
groupDefaultCreatedBy = User.objects.get(username='omar')
new_group = createGroup
new_group.name = groupName
new_group.description = groupDescription
new_group.levels = groupDefaultLevel
new_group.status = groupDefaultStatus
new_group.created_by = groupDefaultCreatedBy
new_group.save()
return redirect('/tab/addMembers')
这里是Models.py文件
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
class Group(models.Model):
name = models.CharField(max_length = 25)
description = models.CharField(max_length = 250)
levels = models.SmallIntegerField()
status = models.SmallIntegerField()
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
正如你所看到的。我正在尝试为组模型的级别,状态,created_by和create添加默认值。 created_by是我从管理网站创建的随机用户。
这里是什么地方的网站说:
IntegrityError at /tab/createGroup/
NOT NULL constraint failed: tab_group.levels
Request Method: POST
Request URL: http://127.0.0.1:8000/tab/createGroup/
Django Version: 1.8.6
Exception Type: IntegrityError
Exception Value:
NOT NULL constraint failed: tab_group.levels
Exception Location: C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 318
Python Executable: C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\python.exe
Python Version: 3.6.1
Python Path:
['C:\\Users\\OmarJandali\\Desktop\\opentab\\opentab',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\lib',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36',
'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
Server time: Tue, 20 Jun 2017 23:03:09 +0000
所以我只需要知道如何之前,它被保存到数据库中,以默认值添加到窗体。任何人都可以帮我
我没有使用过'ModelForm',所以可能有更多的本地方式来做到这一点,但我知道你可以添加'default =“”'值到你的模型本身。 IE,对于'Group.levels',你可以在你的模型中设置:'models.SmallIntegerField(default = 1)',将默认值设置为1,否则没有提供关卡值的实例化对象。你有没有尝试在模型中使用默认值? https://docs.djangoproject.com/en/1.11/ref/models/fields/#default – natureminded