Python 使用Django REST框架存储列表
我有一个模型,其中包含DRF中新添加的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
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.ListFieldhashtags=serializers.ListField()
。这是正确的,如果您切换到PostgreSQL,这将非常好,因为在下一个django realease 1.9中,将有更多对复杂数据结构的支持,PostgreSQL将为您提供更灵活和高效的功能。你仍然可以使用这个第三方模块,它也可以与MySQL配合使用@gregdevs。谢谢,稍后查看一下,会让你知道我的进展。再次感谢您的帮助伟大的和最好的luckI提供了一个更新的答案在这里