调用 `WordsTable.objects.create()` 时出现 `TypeError`

Got a `TypeError` when calling `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)

我正在尝试的数据post:

{
    "session_id" : 4567,
    "word1" : "Pants",
    "word2" : "Shock",
    "word3" : "Cucumber"
}

我要补充什么?这是我第一次使用序列化程序,所以我有点困惑。谢谢!

您将 hour 声明为 models.TimeField,但该字段的默认值是日期,这可能是原因。 如果你想存储小时的值,你可以尝试:

hour = models.IntegerField(blank=True, null=True, default=datetime.datetime.now().hour)