2017-06-20 7 views
0

にデフォルト値を追加し、私は、ユーザーが記入された形を取り、データベースに保管しようとしています。フォームの場合は、標準フォームの代わりにModelFormを使用しています。ジャンゴ:私はジャンゴの小さなプロジェクトに取り組んでいますModelForms

ユーザがフォームが作成グループの名前と説明してフォームを送信します。新しいオブジェクトをデータベースに入れる前に、モデルのフォーム値にデフォルト値を追加します。

はここでここであなたが見ることができるように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) 

を提出される。ここ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') 

ある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'] 

です。グループモデルのレベル、ステータス、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 

だから私はちょうどそれをデータベースに保存される前に、フォームにデフォルト値を追加する方法を知っておく必要があります。ここでは

は、ローカルサイトが言うことです。あなたはモデルのフォームを使用しているので、誰もが私に

+0

私は 'ModelForm'を使用していませんので、そのモジュールでもっと自然な方法があるかもしれませんが、' default = "" valuesあなたのモデル自体に。 Model.levelsを 'Model.SmallIntegerField(default = 1)'に設定すると、レベル値が提供されなかったインスタンス化されたオブジェクトのデフォルト値は1に設定されます。あなたのモデルでデフォルトを使ってみましたか? https://docs.djangoproject.com/en/1.11/ref/models/fields/#default私のために働いた – natureminded

答えて

0

を助けることができる、あなたのフィールドモデルのデフォルト値を設定することができます。

class Group(models.Model): 
    name = models.CharField(max_length = 25) 
    description = models.CharField(max_length = 250, blank=True) 
    levels = models.SmallIntegerField(default=0) 
    status = models.SmallIntegerField(default=0) 
    created_by = models.ForeignKey(User, on_delete=models.CASCADE) 
    created = models.DateTimeField(auto_now_add=True 
+1

があなたの歓迎@omarjandali助け –

+0

いただき、誠にありがとうござい、すでにこの質問あれば答えをチェックすることを忘れてはいけません解決した –

関連する問題