【问题标题】:Django - VueJS - Can't be nullDjango - VueJS - 不能为空
【发布时间】:2020-06-01 14:29:04
【问题描述】:

我使用 Django 和 VueJs 从事一个项目。我有一个字段不能为空的问题,但我不明白为什么。

models.py

from django.db import models
from django.conf import settings


class Tache(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    echeance = models.DateTimeField(null=True, blank=True)
    titre = models.CharField(max_length=240)
    sous_titre = models.CharField(max_length=240, null=True, blank=True)
    content = models.CharField(max_length=240)
    fait = models.BooleanField(default=False)
    slug = models.SlugField(max_length=255, unique=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                                on_delete=models.CASCADE,
                                related_name="taches")

    def __str__(self):
        return self.content

序列化器.py

from rest_framework import serializers
from taches.models import Tache


class TacheSerializer(serializers.ModelSerializer):
    author = serializers.StringRelatedField(read_only=True)
    created_at = serializers.SerializerMethodField(read_only=True)
    # echeance = serializers.SerializerMethodField()
    echeance = serializers.DateTimeField(format = "%Y-%m-%dT%H:%M:%S")
    slug = serializers.SlugField(read_only=True)

    class Meta:
        model = Tache
        exclude = ["updated_at"]

    def get_created_at(self, instance):
        return instance.created_at.strftime("%d" + "/" + "%m" + "/" + "%Y")

    # def get_echeance(self, instance):
    #     if instance.echeance != None:
    #         return instance.echeance.strftime("%Y-%m-%dT%H:%M:%S")

我的问题“字段不能为空”在“echeance”字段上。 您可以看到我在 cmets 中有 4 行,因为 => 不起作用所以我这样做: echeance = serializers.DateTimeField(format = "%Y-%m-%dT%H:%M:%S") 我想我的问题来了...

你知道为什么“echeance”不能为空吗...?

谢谢

编辑:当我尝试通过用户界面和 api django rest 框架字创建新的“tache”时出现此错误。但是我可以由 django 管理员创建一个新的“tache”......当我在 api 中看到“tache”时,“echeance”= null。 我迷路了……

解决方案:我已将“echeance”的模型字段更改为 DateField。在我更改序列化程序后:echeance = models.DateField(format = "%d/%m/%Y", allow_null=True, required=False)。我只有日期而不是时间,但它可以工作。

【问题讨论】:

  • 你得到了什么实际的回溯/异常?
  • 这是控制台错误:VM31718:1 PATCH 127.0.0.1:8000/api/taches/dsfsdfqsdfsf-8r4teg 400(错误请求)
  • 法语网络错误:{"echeance":["Ce champ ne peut être nul."]} 繁体:此字段不能为空

标签: python django vue.js null field


【解决方案1】:

不得不提allow_blank和allow_true

试试这个

echeance = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S", required=False, read_only=True)

【讨论】:

  • 我在启动服务时遇到此错误:__init__() 得到了一个意外的关键字参数 'allow_blank'
  • 只使用allow_blank=True,allow_null=True 用于echeance 不要用于其他字段
  • 是的,像那样? echeance = serializers.DateTimeField(format = "%Y-%m-%dT%H:%M:%S", allow_blank=True, allow_null=True) 这对我不起作用...
  • 好的试试这个echeance = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S", required=False, read_only=True)
  • 使用您的方法创建作品,但您无法设置截止日期(“echeance”)。重要的是能够设置一个啊啊啊。 Read_only = false 也不行
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2016-09-06
相关资源
最近更新 更多