首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-select2 2抛出“结果不能丢失。”

Django-select2 2抛出“结果不能丢失。”
EN

Stack Overflow用户
提问于 2018-01-26 11:46:04
回答 2查看 1.7K关注 0票数 3

我正在尝试将我的django应用程序部署在这个DigitalOcean后面的液滴虚拟机( 指南 )中。

为此,我成功地使用了nginx和gunicorn。

我面临的问题是使用django-select2 2,并且表单的小部件总是显示“结果无法找到”。提供404错误,而在我的本地环境中,它工作完美!

我尝试过实现缓存(希望它能解决这个问题),但是事情变得更糟了,因为启用缓存之后,小部件似乎不再工作了,即使在本地也是如此。

现在到目前为止展示我的代码的时候了:

settings.py:

代码语言:javascript
复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    },
    'select2': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT': 60 * 60 * 24,
    },
}

SELECT2_CACHE_BACKEND = 'select2'

这是按照指南显示的http://django-select2.readthedocs.io/en/latest/django_select2.html#module-django_select2.cache完成的代码

PS:注意使用redis而不是memcached可以得到相同的结果。

这是我的nginx配置:

代码语言:javascript
复制
server {
    listen 80;
    server_name 46.101.134.225;
    client_max_body_size 2M;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static {
        root /projectname;
    }

    location /media {
        root /projectname/staticfiles;
    }

    location /assets {
        root /;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/projectname/projectname.sock;
    }
}

这是我的美眉配置:

代码语言:javascript
复制
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/projectname
ExecStart=/projectname/bin/gunicorn --access-logfile - --workers 3 --bind unix:/projectname/projectname.sock projectname.wsgi:application

[Install]
WantedBy=multi-user.target

这是我的小部件表单:

代码语言:javascript
复制
from django_select2.forms import ModelSelect2Widget, ModelSelect2MultipleWidget
...
class CompanyForm(BaseModeratedObjectForm):
    ...
    city = forms.ModelChoiceField(widget=ModelSelect2Widget(
        model=City, search_fields=['name__istartswith']
    ), queryset=City.objects.all(), required=False)
    ...
    treatments = forms.ModelMultipleChoiceField(widget=ModelSelect2MultipleWidget(
        model=Treatment, search_fields=['name__icontains']
    ), queryset=Treatment.objects.all(), required=False)
    ...

PS:注意,在实现缓存之前,我获得了以下结果:

  • 在我当地的环境中完美地工作。
  • 有时在我的生产环境中工作(有时在输入时出现数据)。

在实现缓存之后,什么都不起作用了(在我的本地环境中,手动导航到select2 url,我可以看到它显示错误field_id未找到)。

编辑:

由于我的答案甚至在github上的django-select2repo中也被接受了,我已经对这个项目做了一个拉请求,修改了文档来通知这个案例!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-29 13:39:57

我终于设法解决了这个问题,问题是,在实现redis缓存时,系统无法找到redis服务器。使用sudo apt-get install redis-server安装它解决了这个问题,同时使用了redis缓存!

票数 1
EN

Stack Overflow用户

发布于 2020-01-27 15:24:24

也安装了redis,但解决方案可能是settings.py中的超时设置。不过不太确定

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48460757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档