Как сделать поля обязательными для заполнения в django restframework

Я создаю API блога и модель Post: проблема в том, что когда я хочу создать пост без содержимого тела, возникает ошибка

class Post(models.Model):

    STATUS_CHOICES = [
        ('P', _('Published')),
        ('D', _('Draft')),
        ('R', _('reject'))
    ]
    title = models.CharField(verbose_name=_("title"), max_length=255)
    slug = models.SlugField(null=True, unique=True, allow_unicode=True)
    lead = models.CharField(verbose_name=_(
        "lead"), max_length=1024, blank=True, null=True)
    body = models.TextField(verbose_name=_("context"))
    thumbnail = models.ImageField(verbose_name=_(
        "thumbnail"), upload_to='posts', blank=True, null=True)
    author = models.ForeignKey(UserAccount, verbose_name=_(
        "author"), on_delete=models.CASCADE)
    status = models.CharField(
        _("status"), max_length=1, choices=STATUS_CHOICES, default=STATUS_CHOICES[1][0])
    publish_time = models.DateTimeField(
        verbose_name=_("published at"), default=timezone.now)

    created_at = models.DateTimeField(
        verbose_name=_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(
        verbose_name=_("updated at"), auto_now=True)

    category = models.ManyToManyField(
        Category, verbose_name=_("Categorys"), related_name='Categorys')
    like_count = models.IntegerField(verbose_name=_("like"), default=0)
    dislike_count = models.IntegerField(verbose_name=_("dislike"), default=0)
    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Post, self).save(*args, **kwargs)

    class Meta:
        ordering = ['-publish_time']

    def __str__(self):
        return self.title


class PostListSerializer(ModelSerializer):
    dietale_url = HyperlinkedIdentityField(
        view_name='api:Post_detail'
    )
    author = SerializerMethodField()

    class Meta:
        model = Post
        fields = [
            'title',
            'author',
            'lead',
            'dietale_url',
        ]

    def get_author(self, obj):
        return obj.author.name


проблема в том, что когда я хочу создать пост, он возвращает ошибку:

{
    "title": [
        "This field is required."
    ]
}

Требуется больше полей, таких как тело автора и ...

если только заголовок является обязательным полем, что происходит с другими полями

Ваш title не может быть blank или null в вашей модели django, а сериализатор, который вы используете, является ModelSerializer, поэтому он будет автоматически обязательным.

Вам нужно удалить blank = True и null = True, если вы не хотите, чтобы ваши поля были обязательными (или переопределить ваши поля в сериализаторе)

Документация:

При использовании сериализатора моделей значение по умолчанию будет False, если вы указали blank=True или default или null=True для вашего поля в вашей модели.

Вернуться на верх