Djongo 重新定义 ArrayModelField 的结构
Djongo redefine the structure of ArrayModelField
我正在定义ArrayModelField using Djongo。它看起来不错,但 ArrayModelField
的问题是我只能将其添加为 对象数组 ,而不仅仅是 平面列表 。有什么方法可以将其添加为 Flat List?
示例:
# models.py
from djongo import models
class Option(models.Model):
option = models.CharField(max_length=100)
class Meta:
abstract = True
def __str__(self):
return self.option
class Quiz(models.Model):
_id = models.ObjectIdField()
question = models.TextField(null=True, blank=True)
options = models.ArrayModelField(model_container=Option)
answers = models.ArrayModelField(model_container=Option)
使用它我可以创建如下文档,
但是我想保存成这种格式,
我也希望在 Django 管理面板 中解析视图。
现在有什么方法可以做到这一点吗?
提前致谢。
使用列表字段:
options = models.ListField()
在 Djongo 的最新版本中,如果你想自动支持管理面板,这种结构仍然是不可能的。话虽如此,您始终可以使用 ListField
并为管理面板编写自定义视图,这是目前有效的解决方案。也看不到开发人员将在其中修复的任何时间表。
对于您的用例,连接的数据库是 MongoDB,您可以这样做:
from djongo import models
from django.contrib.postgres.fields import ArrayField
class Option(models.Model):
.
.
.
class Quiz(models.Model):
_id = models.ObjectIdField()
question = models.TextField(null=True, blank=True)
options = models.ArrayField(models.CharField(max_length=1024, blank=True),size=8)
这将以逗号分隔的方式显示您的选项,即 A、B、C
attaching a screenshot for example
我正在定义ArrayModelField using Djongo。它看起来不错,但 ArrayModelField
的问题是我只能将其添加为 对象数组 ,而不仅仅是 平面列表 。有什么方法可以将其添加为 Flat List?
示例:
# models.py
from djongo import models
class Option(models.Model):
option = models.CharField(max_length=100)
class Meta:
abstract = True
def __str__(self):
return self.option
class Quiz(models.Model):
_id = models.ObjectIdField()
question = models.TextField(null=True, blank=True)
options = models.ArrayModelField(model_container=Option)
answers = models.ArrayModelField(model_container=Option)
使用它我可以创建如下文档,
但是我想保存成这种格式,
我也希望在 Django 管理面板 中解析视图。
现在有什么方法可以做到这一点吗?
提前致谢。
使用列表字段:
options = models.ListField()
在 Djongo 的最新版本中,如果你想自动支持管理面板,这种结构仍然是不可能的。话虽如此,您始终可以使用 ListField
并为管理面板编写自定义视图,这是目前有效的解决方案。也看不到开发人员将在其中修复的任何时间表。
对于您的用例,连接的数据库是 MongoDB,您可以这样做:
from djongo import models
from django.contrib.postgres.fields import ArrayField
class Option(models.Model):
.
.
.
class Quiz(models.Model):
_id = models.ObjectIdField()
question = models.TextField(null=True, blank=True)
options = models.ArrayField(models.CharField(max_length=1024, blank=True),size=8)
这将以逗号分隔的方式显示您的选项,即 A、B、C attaching a screenshot for example