我遇到的问题非常类似于Django的Querydict奇怪的行为:将POST字典串入单个键并单元测试Django JSON View.但是,这些线程中的问题/响应都没有真正指出我遇到的指定问题.我正在尝试使用Django的测试客户端发送带有嵌套JSON对象的请求(我对具有非JSON值的JSON对象有效).
尝试#1:这是我的初始代码:
response = c.post('/verifyNewMobileUser/',
{'phoneNumber': user.get_profile().phone_number,
'pinNumber': user.get_profile().pin,
'deviceInfo': {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 'deviceType': 'I'}})
Run Code Online (Sandbox Code Playgroud)
如您所见,我的请求数据中有一个嵌套的JSON对象.但是,这就是request.POST的样子:
<QueryDict: {u'phoneNumber': [u'+15551234567'], u'pinNumber': [u'4171'], u'deviceInfo': [u'deviceType', u'deviceID']}>
Run Code Online (Sandbox Code Playgroud)
尝试#2:然后我尝试了,添加了content-type参数,如下所示:
response = c.post('/verifyNewMobileUser/',
{'phoneNumber': user.get_profile().phone_number,
'pinNumber': user.get_profile().pin,
'deviceInfo': {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 'deviceType': 'I'}},
'application/json')
Run Code Online (Sandbox Code Playgroud)
我现在要求的是什么.POST是
<QueryDict: {u"{'deviceInfo': {'deviceType': 'I', 'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067'}, 'pinNumber': 5541, 'phoneNumber': u' 15551234567'}": [u'']}>
Run Code Online (Sandbox Code Playgroud)
我想要做的就是为我的请求数据指定一个嵌套的dict.是否有捷径可寻?
我希望能够在模型中定义一个属性,该属性也可以使用"list_display"Admin属性中的admin_order_field显示和排序.下面是我想要定义的属性的代码(并且可以在django管理界面中进行排序)
@property
def restaurant_name(self):
return str(self.restaurant)
restaurant_name.admin_order_field = 'restaurant__name'
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息:
AttributeError: 'property' object has no attribute 'admin_order_field'
Run Code Online (Sandbox Code Playgroud)
当我摆脱@property装饰器时,它工作正常,但是我必须在模型实例上调用restaurant_name()而不是restaurant_name,它在如何访问模型的不同属性(实际定义为Python属性).如何在管理员中将Python属性指定为可排序?
每次我尝试部署到Heroku时,我都会收到一个类似于这个问题的错误(Python pip安装失败:无效命令egg_info)如何解决此问题?它刚刚开始是一个恼人的事情,它会在第二次推动时消失,但现在我根本无法推动.
我的requirements.txt文件.注意:我已经尝试过尝试放入'setuptools'并将其删除,但它没有改变任何东西.
Django==1.5.5
dj-database-url==0.2.1
psycopg2==2.4.6
wsgiref==0.1.2
South==0.8.1
pytz==2013b
gunicorn==0.17.4
django-storages==1.1.6
django-extensions==1.1.1
boto==2.9.9
xhtml2pdf==0.0.5
django-debug-toolbar==0.10.2
numpy==1.6.2
pandas==0.11.0
django-model-utils==1.4.0
django-mailchimp-v1.3==1.3
requests==2.0.0
stripe==1.9.1
django-appconf==0.6
newrelic
redis==2.7.6
django-redis==3.3
rq==0.3.8
django-rq==0.5.1
django-loginas==0.1.3
djangorestframework==2.3.8
pusher==0.8
django-json-field==0.5.5
ZSI==2.0-rc3
APScheduler==2.1.0
django-twilio==0.4
rq-scheduler==0.3.6
django-ios-notifications==0.1.5
mixpanel-py==3.0.0
Run Code Online (Sandbox Code Playgroud) 编辑1:我尝试使用sqlflush重置所有内容,但这没有用.
EDIT2:我能够创建一个用户并将OtherModel指定为NULL,然后稍后编辑该用户以使othermodel成为实际引用.在用户创建期间指定引用时会发生此问题.
因此,在我的应用程序中,它与postgres连接,我正在尝试扩展django提供的用户模型以及名为UserProfile的新模型.我希望每个用户都与我创建的另一个模型相关联.所以这是我的代码:
models.py
.
.
.
class OtherModel(models.Model):
# model info
class UserProfile(models.Model):
user = models.OneToOneField(User)
othermodel = models.OneToOneField(OtherModel, null=True)
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
当我从django管理界面创建用户时,我收到以下错误:
IntegrityError at /admin/auth/user/add/
duplicate key value violates unique constraint "planamocal_userprofile_user_id_key"
DETAIL: Key (user_id)=(23) already exists.
Run Code Online (Sandbox Code Playgroud)
每次我尝试创建一个新用户时,user_id计数都会递增,这很奇怪,因为我的实际用户数保持不变.
这是回溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/auth/user/add/
Django Version: 1.3.1
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'planamocal',
'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware', …Run Code Online (Sandbox Code Playgroud) 编辑2:好的,这很奇怪.(我无法回答我自己的问题,所以我只是把它作为问题的另一个编辑.我认为这与我尝试在Dropbox-synced目录中进行此安装的事实有关.我得到了这个在我的桌面上工作.任何人都可以解释为什么会这样吗?
我正在尝试在我的Mac OS X(Lion)上进行Heroku的Python安装教程(http://devcenter.heroku.com/articles/python),但我会想到创建virtualenv的步骤.
所以我在命令行中做了这个(不使用sudo导致的权限错误):
sudo pip install virtualenv
Run Code Online (Sandbox Code Playgroud)
但是,当我做"virtualenv venv --distribute"(我也尝试过sudo)时,我收到以下错误:
New python executable in venv/bin/python
Installing distribute..............................................................................................................................................................................................................................................................................................done.
Installing pip...
Error [Errno 2] No such file or directory while executing command /Users/AndyFang/Drop...env/bin/easy_install /Library/Python/2.7/...pport/pip-1.1.tar.gz
...Installing pip...done.
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 8, in <module>
load_entry_point('virtualenv==1.7.1.2', 'console_scripts', 'virtualenv')()
File "/Library/Python/2.7/site-packages/virtualenv.py", line 928, in main
never_download=options.never_download)
File "/Library/Python/2.7/site-packages/virtualenv.py", line 1042, in create_environment
install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
File "/Library/Python/2.7/site-packages/virtualenv.py", line 640, in install_pip
filter_stdout=_filter_setup)
File "/Library/Python/2.7/site-packages/virtualenv.py", line 966, in call_subprocess …Run Code Online (Sandbox Code Playgroud) 我目前正在迁移到Django 1.7.我有一些信号传递未保存的模型实例,现在抛出TypeError: Model instances without primary key value are unhashable.
我想知道Django pre_save信号如何在实例周围传递?我正在查看文档,甚至找到了在1.7(https://github.com/django/django/commit/6af05e7a0f0e4604d6a67899acaa99d73ec0dfaa)中实现此功能的提交,我只是不知道它是如何工作的.
有人可以向我解释pre_save是如何解决这个问题或者我如何绕过这个限制的吗?谢谢.
示例代码如下:
from django.dispatch import Signal
send_text = Signal()
unsaved_model = SomeModel() # note that neither `create` or `.save()` are being called
send_text.send(sender=unsaved_model) # error gets thrown when this gets called
Run Code Online (Sandbox Code Playgroud)
追溯:
File "/home/ubuntu/fangsterr-app/notifications/models.py", line 43, in send
send_text.send(sender=self)
File "/home/ubuntu/virtualenvs/venv-2.7.5/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 194, in send
if not self.receivers or self.sender_receivers_cache.get(sender) is NO_RECEIVERS:
File "/home/ubuntu/virtualenvs/venv-2.7.5/lib/python2.7/site-packages/django/db/models/base.py", line 484, in __hash__
raise TypeError("Model instances without primary …Run Code Online (Sandbox Code Playgroud) 我看到如何在Django中删除整个数据库(在Heroku上销毁Postgres数据库).但是,我想删除几个表(基本上在'python manage.py sqlclear appname'中执行sql命令).我该怎么做呢?
我正在使用Redis缓存(django-redis)为我在Heroku上托管的Django应用程序.更具体一点(虽然我认为它与可能的解决方案无关),但我正在使用Redis Cloud插件.
如何在部署时清除缓存?我正在寻找类似于Heroku Deploy上的Clear Memcached的答案,除了Django,而不是Rails.
我最近升级到Django 1.7,当我在管理界面中查看时,当我的本地时区与服务器时区不同时,我开始在DateTime/Time字段上看到这些时区警告.我当然明白为什么他们添加了这个,并且它消除了很多歧义,特别是使用DateTime,但我有一个TimeField实际上存储了与登录用户的时区相关的时间(保存在他们的用户配置文件中),所以警告消息在这种情况下实际上是误导.我也看到Django 1.7确实增加了这个功能(参见https://github.com/django/django/blob/master/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts. js#L63和https://docs.djangoproject.com/en/dev/releases/1.7/#admin-shortcuts-support-time-zones).
我的问题是如何关闭这些消息?如果是这样,有没有办法可以指定如何在每个字段的基础上隐藏警告?
我正在尝试将(http://pytz.sourceforge.net/)中的pytz timezone包包含到我的Django应用程序(版本1.3)中,因此我可以改进时区功能.我很担心这个python包不会部署到Heroku中的应用程序上.我如何确保在Heroku上部署此包?
或者,如果有人能告诉我指出如何处理Django 1.3中的TZ问题,我会非常感激.
django ×8
heroku ×5
python ×3
django-1.7 ×2
django-admin ×2
dropbox ×1
easy-install ×1
pytz ×1
redis ×1
virtualenv ×1