2011-05-10 15 views
6

मैं django विकास में नौसिखिया हूँ।django 'DateTimeField' में कोई डिफ़ॉल्ट मान त्रुटि नहीं है

class A(models.Model):   
    name = models.CharField(max_length=200)  

    def __unicode__(self): 
     self.name 


class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date') 

जब मैं एक तत्व नई 'ए' व्यवस्थापक पृष्ठ पर बनाने के लिए कोशिश कर रहा हूँ, और इसके लिए एक मिलान तत्व बी बनाने और फिर: मैं एक वर्ग एक है जो कई वर्ग बी में डाला गया हो सकता है बनाने हूँ फील्ड 'mydate' अगर मैं "mydate" ले जाने के एक डिफ़ॉल्ट मान

नहीं है, तत्व वर्ग एक के लिए जब save() मार, तो मैं संदेश यह हो रही है: save(), मैं चेतावनी हो रही है क्षेत्र को डीजेगो से चाहिए, मुझे फ़ील्ड भरने की आवश्यकता है!

दिनांक फ़ील्ड बी का हिस्सा होने पर मैं यह आवश्यक संदेश कैसे दिखा सकता हूं !!!

धन्यवाद

+0

आप यहाँ एक अच्छा जवाब के लिए और अधिक विस्तार जोड़ने की जरूरत में एक datetime USE_TZ के आधार पर वस्तु वापस आ जाएगी नहीं है। आप "मिलान तत्व तत्व बी" कैसे बना रहे हैं? क्या यह 'पोस्ट 'सेव' सिग्नल के हिस्से के रूप में 'ए' की' सेव 'विधि में किया गया है, या क्या आप सचमुच व्यवस्थापक को' बी 'के लिए ऐड/चेंज पेज पर जा रहे हैं और वहां से कर रहे हैं? किस विधि के आधार पर, आपके प्रश्न का उत्तर जंगली रूप से अलग हो सकता है। –

+0

हाँ मैं ए तत्व सेव() के माध्यम से ऐसा करने की कोशिश कर रहा था! मुझे नहीं पता कि post_save क्या है, हालांकि मुझे लगता है कि प्रत्येक बी के लिए इसे एक – sramij

उत्तर

12

आप निर्दिष्ट नहीं किया है, जो आपके क्षेत्र वैकल्पिक है, आप इसके लिए आप एक वस्तु बनाने के लिए हर बार एक मूल्य प्रदान करना होगा। आपके मामले में आप नहीं ताकि आप उन चीजों में से एक करना होगा कर सकते हैं:

यहाँ खाना वैकल्पिक बनाने के लिए कैसे:

import datetime 

class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date', default=datetime.datetime.now) 
:

class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date', blank=True, null=True) 

यहाँ कैसे आप डिफ़ॉल्ट मान सेट किया गया है

+0

के साथ सहेजने के लिए कहा जा रहा है, मुझे इसे काम करने के लिए स्क्लिट में भी जाना पड़ा! आपके प्रस्ताव के लिए aditionaly – sramij

+0

@sramij, डीबी इंजन को बदलने की कोई ज़रूरत नहीं है, आपको बस 'suncdb' का उपयोग करके डेटाबेस को फिर से बनाना होगा। –

0

मेरी समझ से, django मॉडल ए को मान्य करने का प्रयास करेगा और फिर सत्यापन त्रुटियों को वापस करेगा। चूंकि एक मान्य है, यह ए लिखने की कोशिश करता है जो विफल रहता है क्योंकि बी मान्य नहीं है। मुझे यकीन नहीं है कि यह सुंदर तरीके से कैसे करें, लेकिन यदि आप ए को मान्य करने से पहले फॉर्म बी का मूल्यांकन करने का प्रयास करते हैं तो आपको "यह फ़ील्ड आवश्यक" संदेश मिलेगा जिसे आप उपयोगकर्ता को प्रदर्शित कर सकते हैं।

4

Django

from django.utils import timezone 
class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date', default=timezone.now) 

में एक उपयोगिता समारोह इस समारोह आप settings.py

def now(): 
    """ 
    Returns an aware or naive datetime.datetime, depending on settings.USE_TZ. 
    """ 
    if settings.USE_TZ: 
     # timeit shows that datetime.now(tz=utc) is 24% slower 
     return datetime.utcnow().replace(tzinfo=utc) 
    else: 
     return datetime.now() 
संबंधित मुद्दे