/ / Django मॉडल फ़ील्ड डिफ़ॉल्ट मान सेट के साथ नहीं होने पर अशक्त बाधा का उल्लंघन करता है - django, django-मॉडल, django-forms

डिफ़ॉल्ट मान सेट के साथ Django मॉडल फ़ील्ड सहेजे जाने पर अशक्त बाधा का उल्लंघन नहीं करता है - django, django- मॉडल, dango-फ़ॉर्म

मेरा क्षेत्र:

signup_date = models.DateTimeField(blank=True,default=datetime.now)

बचत करते समय मेरी त्रुटि:

IntegrityError: null value in column "signup_date" violates not-null constraint

मैं एक साधारण इकाई परीक्षण करने की कोशिश कर रहा हूं, जहां मैं एक तानाशाही से एक मॉडलफ़ॉर्म का एक बाध्य उदाहरण बनाता हूं और इसे बचाता हूं।

धन्यवाद।

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/django/signupform/signup/insert_test_data.py", line 27, in <module>
SDF.save()
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/forms/models.py", line 371, in save
fail_message, commit, construct=False)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/forms/models.py", line 86, in save_instance
instance.save()
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/models/base.py", line 435, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/models/base.py", line 528, in save_base
result = manager._insert(values, return_id=update_pk, using=using)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/models/manager.py", line 195, in _insert
return insert_query(self.model, values, **kwargs)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/models/query.py", line 1479, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/models/sql/compiler.py", line 783, in execute_sql
cursor = super(SQLInsertCompiler, self).execute_sql(None)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/models/sql/compiler.py", line 727, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
return self.cursor.execute(query, args)
IntegrityError: null value in column "signup_date" violates not-null constraint




from django.db import models
from django.contrib.localflavor.us.models import PhoneNumberField
from datetime import datetime
from models_dropdowns import *

class SignupData(models.Model):
first_name = models.CharField(max_length=128,verbose_name="First Name")
last_name = models.CharField(max_length=128,verbose_name="Last Name")
street1 = models.CharField(max_length=128,verbose_name="Street Address 1")
street2 = models.CharField(max_length=128,verbose_name="Street Address 2")
city = models.CharField(max_length=128)
state = models.CharField(max_length=2)
zip = models.IntegerField(verbose_name="Zip Code")
phone_number = PhoneNumberField(verbose_name="Phone Number XXX-XXX-XXXX")
email = models.EmailField(verbose_name="Email Address")
contact_method = models.ForeignKey("ContactMethodChoice",blank=False,default=-1,verbose_name="Preferred contact method")
birth_date = models.DateField(verbose_name="Birth Date")
policy_number = models.CharField(max_length=128,verbose_name="American Family Auto Insurance Policy Number")
vin = models.CharField(max_length=128,verbose_name="Vehicle Identification Number (VIN)")
vehicle_make = models.ForeignKey("VehicleMakeChoice",verbose_name="VehicleMake")
vehicle_model = models.CharField(max_length=128,verbose_name="Vehicle Model")
vehicle_year = models.ForeignKey("VehicleYearChoice",verbose_name="Vehicle Year")
vehicle_ownership = models.ForeignKey("VehicleOwnershipChoice",blank=False,default=-1,verbose_name="Vehicle Ownership")
vehicle_use = models.ForeignKey("VehicleUseChoice",blank=False,default=-1,verbose_name="Use of Vehicle")
terms_and_conditions = models.BooleanField(verbose_name="I Agree to the terms and conditions. (add link)")
form_user_role = models.ForeignKey("FormUserRoleChoice",blank=False,default=-1,verbose_name="Your Role")
participate_in_feedback = models.BooleanField(verbose_name="<b>Opportunity to provide feedback.</b>...<br><br>",help_text="Please check the box if you would like to participate.")
signup_date = models.DateTimeField(blank=True,default=datetime.now,verbose_name="")

मैं निम्न कोड का उपयोग प्रपत्र की एक बाध्य आवृत्ति बनाने और उसे सहेजने के लिए करता हूं। मैं इसे .manage.py शेल से आयात करके चलाता हूं।

from signupform.signup.forms import SignupDataForm

keys =      ("first_name","last_name","street1","street2","city","state","zip","phone_number","email","contact_method","birth_date","policy_number","vin","vehicle_make","vehicle_model","vehicle_year","vehicle_ownership","vehicle_use","terms_and_conditions","form_user_role","participate_in_feedback")

data = [
("firstname1","lastname1","test1","test1","test1","XX",55555,"555-555-5555","test@asdf.com",1,"01/01/01","####-####-##-##-AAAA-AA","123456789abcdefgh",1,"model",1996,1,1,True,1,True),
("firstname2","lastname2","test2","test2","test2","XX",55555,"555-555-5555","test@asdf.com",1,"01/01/01","####-####-##-##-AAAA-AA","123456789abcdefgh",1,"model",1996,1,1,True,1,True),
("firstname3","lastname3","test3","test3","test3","XX",55555,"555-555-5555","test@asdf.com",1,"01/01/01","####-####-##-##-AAAA-AA","123456789abcdefgh",1,"model",1996,1,1,True,1,True),
("firstname4","lastname4","test4","test4","test4","XX",55555,"555-555-5555","test@asdf.com",1,"01/01/01","####-####-##-##-AAAA-AA","123456789abcdefgh",1,"model",1996,1,1,True,1,True),
]

for d in data:
tmpDict = {}
for i in range(0,len(keys)):
tmpDict[keys[i]] = d[i]
SDF = SignupDataForm(tmpDict)
if not SDF.is_valid():
print SDF.errors
else:
SDF.save()

उत्तर:

जवाब के लिए 2 № 1

मेरे लिए आप पर समस्या यह है कि आपको लिखना नहीं चाहिए

default=datetime.now()

लेकिन बदले

default = datetime.now

फ़ंक्शन को डिफ़ॉल्ट के रूप में पारित करना और कोड पार्स होने के समय फ़ंक्शन का परिणाम नहीं है। वर्तमान में, आपके सभी साइनअपडेटा में एक ही साइनअप_डेट होगा

उस ने कहा, मुझे यकीन नहीं है कि यह आपके बग का कारण है।


जवाब के लिए 0 № 2

सुनिश्चित करें कि आप वास्तव में अपनी वस्तुओं को बनाने के लिए Django का उपयोग कर रहे हैं। अन्यथा आप डिफ़ॉल्ट मूल्यों को स्थापित करने के लिए सभी Django जादू को फिर से पास कर रहे हैं।

तो कुछ इस तरह का उपयोग करें:

SignupData.objects.create(blah)

अपने शब्दकोश का उपयोग करने के लिए, शब्दकोश अनपैकिंग का उपयोग करें:

SignupData.objects.create(**my_dictionary)

BTW, आप संभवत: डिफ़ॉल्ट पैरामीटर को कॉल करने योग्य बनाना चाहते हैं, अर्थात् के बाद parens को छोड़ दें now समारोह। इस तरह फ़ंक्शन को हर बार एक नई वस्तु बनाने के लिए कहा जाएगा। Parens के साथ इसे केवल एक बार कहा जाएगा और सभी नए बनाए गए ऑब्जेक्ट के लिए समान मूल्य का उपयोग किया जाएगा।