Python 使用Django REST框架存储列表

Python 使用Django REST框架存储列表,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个模型,其中包含DRF中新添加的ListField类。 我正在尝试存储字符串列表,以便输出如下所示: { "hashtags":["something", "new"], } 我对使用DRF非常陌生,但是我似乎在序列化结果时遇到了一些问题。当我运行请求时,我收到一个 HashField()不可JSON序列化错误。同样,我对使用框架和Python还不熟悉,但任何建议,指向正确的方向都会有所帮助 型号.py class HashField(serializers.ListFiel

我有一个模型,其中包含DRF中新添加的
ListField
类。 我正在尝试存储字符串列表,以便输出如下所示:

{

    "hashtags":["something", "new"],

}
我对使用DRF非常陌生,但是我似乎在序列化结果时遇到了一些问题。当我运行请求时,我收到一个
HashField()不可JSON序列化
错误。同样,我对使用框架和Python还不熟悉,但任何建议,指向正确的方向都会有所帮助

型号.py

class HashField(serializers.ListField):
    child = serializers.CharField(max_length=100)

 class Mention(models.Model):
    author = models.ForeignKey(User)
    hashtags = HashField()      
    placename = models.CharField(max_length=140, default='SOME STRING')
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.placename
class MentionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Mention
序列化程序.py

class HashField(serializers.ListField):
    child = serializers.CharField(max_length=100)

 class Mention(models.Model):
    author = models.ForeignKey(User)
    hashtags = HashField()      
    placename = models.CharField(max_length=140, default='SOME STRING')
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.placename
class MentionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Mention

Django REST框架有不同类型的序列化程序,这里需要的是验证列表类型的字段序列化程序。 在serializers.py中,执行以下操作:

class MentionSerializer(serializers.ModelSerializer):
    hashtags = serializers.ListField()
    class Meta:
        model = Mention

谢谢@dhiatn。我试过了,现在得到了一个异常“在调用
提及.objects.create()
时得到了一个
类型错误
。这可能是因为序列化程序类上有一个可写字段,它不是
提及.objects.create()
的有效参数。您可能需要将该字段设为只读,或者重写提及序列化程序。create()方法正确处理此问题。原始异常文本为:“hashtags”是此函数的无效关键字参数。“@gregdevs我建议在th model字段中使用:
hashtags=ArrayField(models.CharField(max_length=100),blank=True)
和DRF serializer中的serializers.ListField
hashtags=serializers.ListField()
。这是正确的,如果您切换到PostgreSQL,这将非常好,因为在下一个django realease 1.9中,将有更多对复杂数据结构的支持,PostgreSQL将为您提供更灵活和高效的功能。你仍然可以使用这个第三方模块,它也可以与MySQL配合使用@gregdevs。谢谢,稍后查看一下,会让你知道我的进展。再次感谢您的帮助伟大的和最好的luckI提供了一个更新的答案在这里