django'DateTimeField'没有默认值错误

时间:2011-05-10 05:23:24

标签: django django-models django-admin

我是django开发的新手。我正在创建一个可能有多个B类分配给它的A类:

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')

当我尝试在管理页面创建一个新的“A”元素,并为其创建匹配元素B,然后save()时,我收到警告: 字段'mydate'没有默认值

如果我将“mydate”元素移动到A类,那么当点击save()我收到来自Django的消息此字段是时,需要我填写该字段!

如果日期字段是B的一部分,我怎么能显示这个必需的消息呢

由于

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

中的USE_TZ返回日期时间对象
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()

答案 2 :(得分:0)

根据我的理解,django将尝试验证模型A,然后返回验证错误。由于A验证,它会尝试写A失败,因为B没有验证。我不确定如何优雅地执行此操作,但如果您在验证A之前尝试自行评估表单B,则会收到“此字段为必填”消息,然后您可以向用户显示该消息。