简体   繁体   English

如何使用 Django MongoEngine 在 MongoDB 中存储数组

[英]How to store Array in MongoDB using Django MongoEngine

I'm creating a quiz app in django and mongodb using mongoengine.我正在使用 mongoengine 在 django 和 mongodb 中创建一个测验应用程序。 In multiple choice model.在多选 model 中。 I need an variable array to store all the choices of each question.我需要一个变量数组来存储每个问题的所有选择。 I'm a total beginner so need a little help.我是一个初学者,所以需要一点帮助。 Here's the code:这是代码:

class multichoice(Document):
    m_title = fields.StringField(primary_key=True, max_length=255, verbose_name='Title')
    m_question = fields.StringField(verbose_name='Question')
    m_question_number = fields.StringField(max_length=255, verbose_name='Question Number')
    m_alternatives = fields.StringField(verbose_name='Alternatives')

Required Result要求的结果

{
    "_id": "Which one is the German car company",
    "m_alternatives": ["Honda", "BMW"],
    "m_question": "Which one is the German car company",
    "m_question_number": "2"
}
{
    "_id": "world most valuable company is:",
    "m_alternatives": ["Google", "Microsoft", "Amazon", "Facebook", "Coca-Cola", "Disney", "Leisure", "Samsung", "Louis Vuitton", "McDonald's", "Apple"],
    "m_question": "world most valuable company is:",
    "m_question_number": "3"
}

EDIT 1编辑 1

class multichoice(Document):
    m_title = fields.StringField(primary_key=True, max_length=255, verbose_name='Title')
    m_question = fields.StringField(verbose_name='Question')
    m_question_number = fields.StringField(max_length=255, verbose_name='Question Number')
    m_alternatives = fields.ListField(fields.StringField(),verbose_name='Alternatives')

Error (Only lists and tuples may be used in a list field: ['m_alternatives'])错误(Only lists and tuples may be used in a list field: ['m_alternatives'])
Full Traceback完整回溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/content_admin/mcqs/multichoice/add/

Django Version: 3.0.5
Python Version: 3.9.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_mongoengine',
 'django_mongoengine.mongo_auth',
 'django_mongoengine.mongo_admin',
 'mcqs']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\contrib\admin\options.py", line 607, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\contrib\admin\sites.py", line 231, in inner
    return view(request, *args, **kwargs)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\contrib\admin\options.py", line 1638, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\utils\decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\Program Files\Python39\lib\site-packages\django_mongoengine\mongo_admin\options.py", line 317, in changeform_view
    self.save_model(request, new_object, form, not add)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\django\contrib\admin\options.py", line 1081, in save_model
    obj.save()
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\mongoengine\document.py", line 387, in save
    self.validate(clean=clean)
  File "C:\Users\Ali Abdullah\AppData\Roaming\Python\Python39\site-packages\mongoengine\base\document.py", line 432, in validate
    raise ValidationError(message, errors=errors)

Exception Type: ValidationError at /content_admin/mcqs/multichoice/add/
Exception Value: ValidationError (multichoice:Capital of India is:) (Only lists and tuples may be used in a list field: ['m_alternatives'])

EDIT 2编辑 2

from django_mongoengine import mongo_admin as admin
from mcqs.models import *

# Register your models here.
class multichoice_admin(admin.DocumentAdmin):
    model = multichoice
    fields = ('m_question', 'm_alternatives', 'm_title', 'm_question_number', )


admin.site.register(multichoice, multichoice_admin)

You can use ListField for mongoengine.您可以将ListField用于 mongoengine。 Check here 在这里检查

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM