Получена `TypeError` при вызове `WordsTable.objects.create()`.
Я пытаюсь сохранить некоторые данные в базе данных с помощью сериализатора. Я создал модель и сериализатор, но при попытке сохранить данные я получаю эту ошибку. Я видел много ответов, но так и не пришел к решению.
Я получаю эту ошибку:Got a TypeError when calling WordsTable.objects.create(). This may be because you have a writable field on the serializer class that is not a valid argument to WordsTable.objects.create(). You may need to make the field read-only, or override the WordsTableSerializer.create() method to handle this correctly.
models.py:
class WordsTable(models.Model):
session_id =
models.IntegerField(db_column='session_ID',
blank=True,
null=True) # Field name made lowercase.
user_id = models.IntegerField(db_column='user_ID',
blank=True, null=True) # Field name made lowercase.
date = models.DateField(blank=True, null=True,
default=datetime.date.today)
hour = models.TimeField(blank=True, null=True,
default=datetime.date.today)
run_label = models.IntegerField(blank=True,
null=True)
status = models.IntegerField(blank=True, null=True)
word1 = models.CharField(max_length=45, blank=True,
null=True)
word2 = models.CharField(max_length=45, blank=True,
null=True)
word3 = models.CharField(max_length=45, blank=True,
null=True)
word4 = models.CharField(max_length=45, blank=True,
null=True)
word5 = models.CharField(max_length=45, blank=True,
null=True)
class Meta:
db_table = 'words_table'
Сериализатор:
class WordsTableSerializer(serializers.ModelSerializer):
class Meta:
model = WordsTable
fields = "__all__"
Views.py:
#API
@api_view(['POST'])
def save_words(request):
if request.method=="POST":
saveserialize=WordsTableSerializer(data=request.data)
if saveserialize.is_valid():
saveserialize.save()
return Response(saveserialize.data, status=status.HTTP_201_CREATED)
return Response(saveserialize.data, status=status.HTTP_400_BAD_REQUEST)
Что мне нужно добавить? Это первый раз, когда я использую сериализаторы, поэтому я немного запутался. Спасибо!
Вы объявили hour как models.TimeField, но значением по умолчанию для поля является дата.
Если вы хотите хранить значение часа, вы можете попробовать:
hour = models.IntegerField(blank=True, null=True, default=datetime.datetime.now().hour)