2011-05-10 49 views
6

我是django开发的新手。我创建可能分配有多个B类A类:当我试图创建在管理页面了新的“A”元素,并为它创造一个匹配的元素B,然后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') 

save()字段“指明MyDate”没有默认值

如果我移动“指明MyDate”,元至A级,然后我得到一个消息此:save(),我收到警告字段需要Django的,需要我填写该字段!

当日期字段是B的一部分时,我怎么能使这个所需的消息也出现!

感谢

+0

你需要一个很好的答案在这里添加更多详细信息。你如何“创建一个匹配元素B”?它是在'''''save'方法中完成的,作为'post_save'信号的一部分吗?还是你真的要进入'B'的管理员添加/更改页面并从那里进行?根据不同的方法,你的问题的答案可能会大不相同。 – 2011-05-10 21:44:19

+0

是的,我试图通过A元素保存()!我不知道什么是post_save,但我认为它被称为每个B我保存在一起A – sramij 2011-05-11 17:04:57

回答

12

如果没有指定,那你的字段是可选的,你将不得不在每次创建对象时为它提供一个值。你的情况,你不能这样,你将不得不做的事情之一:

这里是如何使现场可选:

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

这里是你如何设置默认值:

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) 
+0

我不得不移动到sqlit也使其工作! aditionaly to u'r proposal – sramij 2011-05-11 17:03:16

+0

@sramij,不需要更改数据库引擎,只需使用'suncdb'重新创建数据库即可。 – 2011-05-12 06:24:05

0

从我的理解,django会尝试验证模型A,然后返回验证错误。由于A验证,它会尝试写入A,因为B不验证而失败。我不确定如何优雅地做到这一点,但如果您在验证A之前尝试自行评估表格B,您将看到“此字段是必需的”消息,然后您可以向用户显示该消息。

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) 

的实用功能,此功能将返回基于USE_TZ DateTime对象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() 
相关问题