如何在django模型中保存日期字段?

时间:2017-05-11 23:14:33

标签: python django

我无法通过模型中的表单保存对象,因为我收到一条错误消息“sportsession.date可能不是NULL”

models.py

class SportSession(models.Model):
session_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
sport_type = models.ForeignKey(SportType)
date = models.DateField()
usuario = models.ForeignKey(User)

def __unicode__(self):  # python 2
    return self.name

forms.py

class SportSessionForm(ModelForm):
  class Meta:
    model = SportSession
    exclude = ("usuario", "date", "session_id")

views.py

def sport(request):
  form = SportSessionForm(request.POST or None)
  if form.is_valid():
    form_data = form.cleaned_data  # obtenemos la info del formulario
    obj = SportSession.objects.create()
    obj.name = form_data.get("name")
    obj.sport_type = form_data.get("sport_type")
    obj.date = date.today()
    obj.save()
  context = {
    "sport_session_form": form,
  }
  return render(request, "sport.html", context)

2 个答案:

答案 0 :(得分:3)

如果您想稍后添加对象数据,请不要调用create方法,只需创建一个实例:

obj = SportSession()
obj.name = form_data.get("name")
obj.sport_type = form_data.get("sport_type")
obj.date = date.today()
obj.usuario = request.user  # You need to set this as well to appropriate user instance
obj.save()

您得到的错误是因为模型中的date字段不能为null,但您尝试使用SportSession.objects.create()创建对象而不传递所需数据。

注意:您的usuario字段也不能为空(请参阅我在代码中的说明)。

答案 1 :(得分:0)

您还可以使用models.py中的date = models.DateField(auto_now_add=True)在首次创建对象时自动将字段设置为现在。(请参阅https://docs.djangoproject.com/en/dev/ref/models/fields/#datefield