简体   繁体   中英

How save date fields in django model?

I can't save an object through form from model because i get an error that says "sportsession.date may not be 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)

You should not call create method if you want to add object data later, just create an instance of it:

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

The error you get was because date field in your model can't be null but you were trying to create an object using SportSession.objects.create() without passing in the required data.

Note: You have usuario field which can't be null as well (see my note in code).

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM