我正在尝试使用Django
进行连接。我更改了数据库参数,但收到此错误MongoDB
Djongo
未实现错误:数据库对象未实现真值测试或 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) 我正在开发一个项目,该项目有一个 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 djongo
django 版本从 3.2 降级到 3.0.5,解决了这个问题。
因此,我尝试为在 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) 我有一个 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。
如何避免这个错误?
我正在尝试使用 django 将我的 django 实例连接到 mongo db 集群。我已经从各种来源进行了检查,它越来越接近工作的方式是:
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
有没有人解决过这个问题?
我正在尝试在单个应用程序(待办事项)中使用多个不同的数据库。我正在使用 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”中。
正如我在标题中所说,我想将 mongoDB 集成到 Django3.0 项目中的 Postgres 数据库旁边。
我曾经使用 djongo* 但它似乎与最新版本的 Django 不兼容。
您认为在 Django 项目中使用 mongoDB 的最佳连接器是什么?
最近,我开始了一个项目,使用 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) 我遵循了数据库连接配置的指南: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-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) 每当我部署在 heroku 上的 django 应用程序尝试访问我的 MongoDB Atlas 集群以提交表单或检查管理员登录时,它都会抛出类似附加错误的内容。
此处可在 heroku 构建中重现错误
我认为这是错误与 heroku 如何与我的 MongoDB Atlas 集群交互有关,因为当我在本地运行构建时,我能够让应用程序成功读取并修改我的数据库中的不同记录。
我已经启用了从所有 IP 地址到我的 Atlas 集群的流量,从我的 Heroku 应用程序和配置变量中删除了默认的 Heroku PostrgreSQL 数据库,并将我自己的数据库 IP 存储为配置变量。
任何帮助将不胜感激。
# 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 应用程序带有这样的模块:
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)