如何使 Django 的 DateTimeField 成为可选的?

我试图实现一个待办事项清单的网站来练习使用 Django。在 models.py 中,我有一个名为 Item的类来表示一个 to-do 项。在里面,我写了这样一句话:

due_date = models.DateTimeField(required=False)

due_date是一个可选的字段,如果用户有一些待办事项的最后期限。问题是,由于意外的关键字参数“必需”,上面的行给出了一个 TypeError

因此,似乎我不能使用 DateTimeField的关键字参数“必需”。有没有办法让 DateTimeField成为可选的?或者对于我遇到的问题有一个标准的实现吗?

68698 次浏览

due_date = models.DateTimeField(null=True, blank=True)

Check Field Options for more information.

"required" is a valid argument for Django forms. For models, you want the keyword args blank=True (for the admin) and null=True (for the database).

Before you save the form you need to set the datefields to None. Its works for me

class ActividadEdit(SuccessMessageMixin, UpdateView ):
model = Ges_Actividad
form_class = GestionActividadesUpdateForm
template_name = 'seguimiento_formula/actividades_seguimiento_update.html'


def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
self.object = self.get_object()
id_actividad = kwargs['pk']
instancia_nivel = self.model.objects.get(id=id_actividad)
form = self.form_class(request.POST, instance=instancia_nivel)
id_usuario_actual = self.request.user.id  # obtiene id usuario actual


try:
periodo_actual = Glo_Periodos.objects.get(id_estado=1)
except Glo_Periodos.DoesNotExist:
return None


try:
id_jefatura = Ges_Jefatura.objects.get(Q(id_user=id_usuario_actual) & Q(id_periodo=periodo_actual.id))
except Ges_Jefatura.DoesNotExist:
return None


try:
usuario_controlador = Ges_Controlador.objects.get(id_jefatura=id_jefatura.id)
except Ges_Controlador.DoesNotExist:
return None
#**before you save the form you need to set the datefields to None. Its works for me**.
form.instance.fecha_real_termino = None
form.instance.fecha_real_termino = None
form.instance.fecha_real_termino = None




if form.is_valid():


if self.request.session['id_orden'] == 2:
id_objetivo = Ges_Objetivo_Tactico.objects.get(id=self.request.session['id_objetivo'])
form.instance.id_objetivo_tactico = id_objetivo


if self.request.session['id_orden'] == 3:
id_objetivo = Ges_Objetivo_TacticoTN.objects.get(id=self.request.session['id_objetivo'])
form.instance.id_objetivo_tacticotn = id_objetivo


if self.request.session['id_orden'] == 4:
id_objetivo = Ges_Objetivo_Operativo.objects.get(id=self.request.session['id_objetivo'])
form.instance.id_objetivo_operativo = id_objetivo


form.save()
request.session['message_class'] = "alert alert-success"
messages.success(self.request, "Los datos fueron actualizados correctamente!")
return HttpResponseRedirect('/actividades/detalle/' + str(self.request.session['id_objetivo']))
else:
request.session['message_class'] = "alert alert-danger"
messages.error(self.request,
"Error interno: No se ha creado el registro. Comuníquese con el administrador.")
return HttpResponseRedirect('/actividades/detalle/' + str(self.request.session['id_objetivo']))