我无法通过模型中的表单保存对象,因为我收到一条错误消息“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)
答案 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)