标签: djongo

为什么我收到“未实现错误:数据库对象未实现真值测试或 bool()”。在 django 中运行 makemigration cmd 时

我正在尝试使用Django进行连接。我更改了数据库参数,但收到此错误MongoDBDjongo

未实现错误:数据库对象未实现真值测试或 bool()。

当我运行 makemigration 命令时。

请问有人可以解释一下为什么我会收到此错误以及如何解决它吗?

我有包含settings.py文件、错误日志和mongodb compass安装映像。

设置.py

"""
Django settings for Chatify project.

Generated by 'django-admin startproject' using Django 3.2.9.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ …
Run Code Online (Sandbox Code Playgroud)

python django mongodb djongo

23
推荐指数
4
解决办法
3万
查看次数

Django:无法实例化用于检索数据的模型的抽象模型

我正在开发一个项目,该项目有一个 Djongo 抽象模型和一个主模型。当我尝试插入一个值时,它被插入而没有错误。但是当我尝试检索数据时,我得到“抽象模型无法实例化”。

这是我的模型:

class Exam_questions(models.Model):
    question=models.CharField(max_length=200,null=True)
    options=ArrayField(models.CharField(max_length=50))
    answer=models.CharField(max_length=50,null=True)
    types=models.CharField(max_length=50,null=True)
    
    class Meta:
        abstract=True


    

class ExamDetails(models.Model):
    _id=ObjectIdField()
    exam_id=models.IntegerField(null=False,default=0)
    questions=models.EmbeddedField(model_container=Exam_questions)
    objects = models.DjongoManager()
Run Code Online (Sandbox Code Playgroud)

这是我的查询代码:

def exams_questions(request,exam_id):
        get_exams=ExamDetails.objects.filter(exam_id=3)
        print(get_exams)
        return HttpResponse("hello") # have given this response only for testing
Run Code Online (Sandbox Code Playgroud)

当我尝试迭代或获取变量 get_exams 中的值时,我收到“抽象模型无法实例化”错误。请帮忙!

谢谢

编辑:我修好了。我将pip install djongodjango 版本从 3.2 降级到 3.0.5,解决了这个问题。

django django-models mongodb djongo

8
推荐指数
2
解决办法
5371
查看次数

Djongo + Django + MongoDB Atlas 尝试重置密码时出现数据库错误

因此,我尝试为在 Django 上运行并使用 Djongo 的网站创建密码重置链接。每当我输入密码并单击重置密码按钮时,都会出现此错误:

Environment:


Request Method: POST
Request URL: http://localhost:8000/password-reset/

Django Version: 3.1.4
Python Version: 3.8.3
Installed Applications:
['blog.apps.BlogConfig',
 'users.apps.UsersConfig',
 'crispy_forms',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_cleanup']
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\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\cursor.py", line 51, in execute
    self.result = Query(
  File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\sql2mongo\query.py", line 783, in __init__
    self._query = self.parse()
  File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\sql2mongo\query.py", line 875, in parse
    raise e
  File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\sql2mongo\query.py", line 856, in parse
    return handler(self, statement)
  File …
Run Code Online (Sandbox Code Playgroud)

python django change-password mongodb djongo

7
推荐指数
1
解决办法
551
查看次数

Django EmbeddedField 由于重命名字段而引发 ValidationError

我有一个 Django 应用程序djongo作为数据库驱动程序。型号为:

class Blog(models.Model):
    _id = models.ObjectIdField()
    name = models.CharField(max_length=100, db_column="Name")
    tagline = models.TextField()

class Entry(models.Model):
    _id = models.ObjectIdField()
    blog = models.EmbeddedField(
        model_container=Blog
    )
Run Code Online (Sandbox Code Playgroud)

当我运行这个应用程序时,我收到一个错误:

File "\.venv\lib\site-packages\djongo\models\fields.py", line 125, in _validate_container
    raise ValidationError(
django.core.exceptions.ValidationError: ['Field "m.Blog.name"  of model container:"<class \'project.m.models.Blog\'>" cannot be named as "name", different from column name "Name"']
Run Code Online (Sandbox Code Playgroud)

我想保持模型和数据库中的字段名称name不同,因为数据库已经存在,并且我无法更改它。数据库使用camelCase命名字段,而在应用程序中,我想使用snake_case。

如何避免这个错误?

python django django-models mongodb djongo

7
推荐指数
1
解决办法
210
查看次数

如何将 Django ORM 连接到 mongo 图集?

我正在尝试使用 django 将我的 django 实例连接到 mongo db 集群。我已经从各种来源进行了检查,它越来越接近工作的方式是:

  • 安装 dnspython
  • 有以下DATABASES字典settings.py
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'test',
        'HOST': 'mongodb+srv://mongo_usr:' + urllib.parse.quote('mypassword') + '@domain_assigned.mongodb.net/test?ssl=true&ssl_cert_reqs=CERT_NONE&retryWrites=true',
        'ENFORCE_SCHEMA': False
    }
}

Run Code Online (Sandbox Code Playgroud)

它确实找到了端点,但我收到了一个奇怪的错误:

pymongo.errors.ServerSelectionTimeoutError: connection closed,connection closed,connection closed

有没有人解决过这个问题?

django mongodb mongodb-atlas djongo

6
推荐指数
3
解决办法
6797
查看次数

没有将记录保存到 Django 中的 mongodb 数据库中,实际上我正在尝试在单个应用程序中探索多个不同的数据库(Postgresql、Mongodb)

我正在尝试在单个应用程序(待办事项)中使用多个不同的数据库。我正在使用 Djongo 包来处理 mongodb。

设置.py

DATABASES = {
    'default':{},
    'sql_db': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'my_db',
        'USER': '******',
        'PASSWORD': '***',
        'HOST': 'localhost',
        'PORT': '5432',
    },
    'mongodb':{
        'ENGINE': 'djongo',
        'NAME': 'mongo_db'
    }
}
Run Code Online (Sandbox Code Playgroud)

待办事项/模型.py

class Task(models.Model):
    todo = models.CharField(max_length=200)
    status = models.BooleanField(default=False)
    
    def __str__(self):
        return self.todo
Run Code Online (Sandbox Code Playgroud)

todo/serializers.py

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

待办事项/视图.py

@api_view(['POST'])
def todoCreate(request):
    serializer = TodoSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        serializer.save(using='mongodb')
    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

它成功地将记录保存到“sql_db”中,但没有保存在“mongodb”中。

database django orm multiple-databases djongo

6
推荐指数
1
解决办法
45
查看次数

将 mongoDB 与 django 3.0 一起使用

正如我在标题中所说,我想将 mongoDB 集成到 Django3.0 项目中的 Postgres 数据库旁边。

我曾经使用 djongo* 但它似乎与最新版本的 Django 不兼容。
您认为在 Django 项目中使用 mongoDB 的最佳连接器是什么?

* https://github.com/nesdis/djongo

django mongodb djongo

4
推荐指数
1
解决办法
2823
查看次数

Django 无法连接到 mongoDB atlas

最近,我开始了一个项目,使用 Django 后端和托管在 Atlas 平台上的 mongoDB 数据库制作一个 Web 服务器,这样我就不必担心在本地运行它。

我仍处于设置的早期阶段并遇到了此错误:

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it

还可能需要提到的是,我目前没有 Django 应用程序形式的数据库或模型文档,但我怀疑这是问题,因为当我运行时,manage.py migrate我收到上述错误,而不是“没有带标签的应用程序” “ 错误。

我的 settings.py 中的数据库配置当前如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'house-project',
        'HOST': 'mongodb+srv://<my-user-name>:<my-password>@house-project-9g5fo.gcp.mongodb.net/test?retryWrites=true&w=majority'
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道常见错误之一是您的密码和用户名中包含特殊字符,我已确保不包含任何特殊字符或使用十六进制字符转义它们。我已确保在 Atlas 端添加我的 IP 和用户。我在网上查了一下现有的答案,但无济于事。我发现的最接近的问题是:How to connect Django ORM to mongo atlas? ,但遗憾的是这个解决方案对我不起作用。

任何帮助都会很好地解决这个问题,如果需要有关我的设置的任何其他信息,请告诉我,我很乐意提供。我还包含了一个堆栈跟踪,以防它与下面相关。

Traceback (most recent call last):
  File "manage.py", line 20, in <module>
    main()
  File "manage.py", line …
Run Code Online (Sandbox Code Playgroud)

python django mongodb mongodb-atlas djongo

3
推荐指数
1
解决办法
2808
查看次数

Django 总是连接到本地主机 mongodb

我遵循了数据库连接配置的指南:https : //nesdis.github.io/djongo/database-configuration/

但是,它始终连接到本地主机之一,而不是我的设置。

有没有人对这个问题有任何想法?

我的软件包版本:

Django  2.0
django-cors-headers 2.4.0   
django-rest-auth    0.9.3   
djangorestframework 3.9.0   
djongo  1.1 
mongoengine 0.16.3  
pip 10.0.1  
pymongo 3.7.2   
urllib3 1.24.1  
Run Code Online (Sandbox Code Playgroud)

我的设置

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'test_db',
        'HOST': 'somewhere.com',
        'PORT': 27017
    }
}
Run Code Online (Sandbox Code Playgroud)

django djongo

2
推荐指数
1
解决办法
766
查看次数

尽管字段具有“空白=真”,但在执行 PUT 请求时,Django EmbeddedModelField 会说“此字段可能不为空”

我正在使用 django-rest-framework 创建一个 Django 应用程序,并使用 djongo 连接到 MongoDB。我有这样的嵌套模型:

class Group(models.Model):
    users = models.ArrayModelField(
        model_container=User
    )

class User(models.Model):
    number = models.IntegerField(
        default=None,
        null=True
    )

    song = models.EmbeddedModelField(
        model_container=Song,
        null=True,
        blank=True
    )

    class Meta:
        abstract = True

class Song(models.Model):
    mp3_file = models.URLField(
        default=None,
        blank=True,
        null=True
    )

    comments = models.CharField(
        max_length=250,
        default='',
        blank=True
    )

    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

创建组后,用户和歌曲的创建没有任何问题。例如,创建后,组可能如下所示:

{
    "name": "Sample",
    "users: [
        {
            "number": null,
            "song": {
                "mp3_file": null,
                "comments": ""
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这一切正常。但是,如果我尝试执行 PUT 请求并且不更改“number”、“mp3_file”或“comments”的值,则会收到以下错误消息:

"user": [ …
Run Code Online (Sandbox Code Playgroud)

django django-models mongodb django-rest-framework djongo

2
推荐指数
1
解决办法
3667
查看次数

Django + Heroku + MongoDB Atlas (Djongo) = DatabaseError 无异常

问题的一行描述

每当我部署在 heroku 上的 django 应用程序尝试访问我的 MongoDB Atlas 集群以提交表单或检查管理员登录时,它都会抛出类似附加错误的内容。

额外的细节

此处可在 heroku 构建中重现错误

我认为这是错误与 heroku 如何与我的 MongoDB Atlas 集群交互有关,因为当我在本地运行构建时,我能够让应用程序成功读取并修改我的数据库中的不同记录。

我已经启用了从所有 IP 地址到我的 Atlas 集群的流量,从我的 Heroku 应用程序和配置变量中删除了默认的 Heroku PostrgreSQL 数据库,并将我自己的数据库 IP 存储为配置变量。

任何帮助将不胜感激。

Python脚本


    # Model Script
    from django.db import models
    
    class RawRequest(models.Model):
        content = models.CharField(max_length=130)
        identifier = models.CharField(max_length=30)


Run Code Online (Sandbox Code Playgroud)

    # Views Script
    from django.shortcuts import render
    from django.shortcuts import redirect
    from django.urls import reverse
    from django.http import HttpResponse
    from django.views.generic import CreateView
    from .models import RawRequest
    
    
    # Create your views …
Run Code Online (Sandbox Code Playgroud)

django heroku mongodb nosql djongo

2
推荐指数
1
解决办法
1513
查看次数

Djongo 查询 BooleanField 失败

我的 Django 应用程序带有这样的模块:

class myApp(models.Model):
    is_new = models.BooleanField(default=True)
    more_fields = models.TextField(blank=True)

Run Code Online (Sandbox Code Playgroud)

并使用 Djongo 作为数据库(即 mongodb)

我可以毫无问题地查询模块中的所有字段,但是,在过滤如下所示的布尔字段时:

    myList = myApp.objects.filter(is_new=False)
        
    for record in myList: ....
Run Code Online (Sandbox Code Playgroud)

它失败并出现以下错误:

  File "/home/user/myApp/venv/lib64/python3.9/site-packages/djongo/sql2mongo/operators.py", line 258, in evaluate
    self.rhs.negate()
AttributeError: 'NoneType' object has no attribute 'negate'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/user/myApp/venv/lib64/python3.9/site-packages/djongo/cursor.py", line 51, in execute
    self.result = Query(
  File "/home/user/myApp/venv/lib64/python3.9/site-packages/djongo/sql2mongo/query.py", line 784, in __init__
    self._query = self.parse()
  File "/home/user/myApp/venv/lib64/python3.9/site-packages/djongo/sql2mongo/query.py", line 885, in parse
    raise …
Run Code Online (Sandbox Code Playgroud)

python database django filter djongo

2
推荐指数
1
解决办法
1118
查看次数