Как сделать поля обязательными для заполнения в 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 для вашего поля в вашей модели.