django - 如何使用 MongoDB 在 Django REST 框架模型中获取字符串列表

标签 django mongodb django-models django-rest-framework djongo

我正在使用 Django 版本 2.2.11 和 MongoDB 作为数据库

我是一个简单的数组字段,用于在 Django REST 框架模型中存储字符串列表。我希望序列化的 JSON 输出是这样的。

{
   name : "John"
   roles : [ "string1", "string2" ]
}

我在互联网上搜索,只能找到 PostgreSQL 的实现。

我只需要将角色的数据作为字符串/列表存储在数据库中,并需要在 api View 中以正确的格式显示。

编辑

我附上了使用的模型和序列化程序。

class UserProfile(AbstractBaseUser, PermissionsMixin):
   username = None
   email = models.EmailField(max_length=255, unique=True)
   name = models.CharField(max_length=255, default="")

   is_active = models.BooleanField(default=True)
   is_staff = models.BooleanField(default=False)
   objects = UserProfileManager()

   USERNAME_FIELD = 'email'
   REQUIRED_FIELDS = ['name',]

   def get_full_name(self):
       return self.name

   def get_short_name(self):
       return self.name

   def __str__(self):
       return (self.name + " - " + self.email)



class UserDetails(models.Model):
   user_profile = models.OneToOneField(UserProfile, on_delete=models.CASCADE, related_name = 'user_details', null = False)
   nickname = models.CharField(max_length=255, blank = True)
   about = models.TextField(max_length=50000, blank=True)
# role = 

 def __str__(self):
    return (self.user_profile.name +" - "+self.user_profile.email)

序列化器:

class UserDetailsSerializer(serializers.ModelSerializer):
    user_profile = UserProfileSerializer(read_only=True)

    class Meta:
        model = UserDetails
        fields = '__all__'

    def create(self, validated_data):
        user_profile = self.context['request'].user
        validated_data['user_profile'] = user_profile
        return super().create(validated_data)

UserDetails 模型中的角色字段应该包含如下内容

角色:["President", "Admin"]

一个 JSON 字符串数组。

最佳答案

这是我使用的解决方法

djongo 库本身不支持模型字段列表。如果您使用的是 MongoDB,则有两种选择。

  1. 将输入保存为文本文件,并在返回到 API 端时将其序列化为列表。
  2. 使用带有一个模型字段的抽象模型类。使用 djongo 库中的 ArrayField。这将数据作为对象存储在数据库中。您必须手动处理序列化程序方法。对于 get 请求,序列化程序可以使用 serializer.SerializerMethodField() 并返回原始类型(如 Char)的列表而不是对象列表。

我觉得第二种选择更好。

关于django - 如何使用 MongoDB 在 Django REST 框架模型中获取字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62170608/

相关文章:

json - 执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。 com/mongodb/util/JSON

mongodb - 运行 mongodb --repair 数据库为空后

python - 如何在 django GET api(rest 框架)中返回单个对象

django - 将 Django 管理表单放在不同的文件中

python - 在多对多字段中使用 through 属性并遇到 "Non-Unique"字段要求

javascript - 如何通过异步等待在严格模式下正确使用集合

python - 在 Django 中为模型创建 21 个字符的唯一字段

Django 多个模型,同一张表

python - Django + (django-model-utils) : Combining two models/inheriting from two models

django - celery 重复我的任务三次