我在我的网络应用程序中一起使用Django,uWSGI和nginx。我有一个奇怪的问题,其中预先填充今天日期的DateField在今天之前的某个日期被卡住了。我把它缩小到我上次重新启动uWSGI守护程序的日期。如果我重新启动守护进程并刷新页面,它会立即修复,但如果我明天重新访问该页面,它将具有今天的日期。
我认为默认情况下uWSGI和nginx都没有启用任何缓存。
我不会打扰包括nginx配置,因为我不相信这是相关的,但这是我的uwsgi配置:
[uwsgi]
chdir=/home/nick/django-prod/budget
pythonpath=..
socket=/home/nick/django-prod/uwsgi/uwsgi.sock
module=budget.wsgi
wsgi-file=/home/nick/django-prod/budget/wsgi.py
master=True
pidfile=/tmp/project-master.pid
vacuum=True
uid=www-data
gid=www-data
max-requests=5000
daemonize=/var/log/uwsgi/budget.log
我相信这可能 less 相关,但无论如何我都会在这里包含它,这是我用作日期选择器字段的自定义窗口小部件,它覆盖了内置的DateField:
class JDatePickerWidget(forms.DateInput):
def __init__(self, attrs=None, format='%m/%d/%Y'):
super(JDatePickerWidget, self).__init__(attrs)
self.format = format
def render(self, name, value, attrs=None):
if value is None:
value = ''
final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
if value != '':
# Only add the 'value' attribute if a value is non-empty.
final_attrs['value'] = force_text(self._format_value(value))
return_string = mark_safe(u'''<script type="text/javascript">
$(function() { $( '#%s' ).datepicker({ dateFormat: 'mm/dd/yy'}); });
</script>''' % final_attrs['id'])
return_string = return_string + format_html('<input{0} />', flatatt(fin$
return return_string
class JDatePicker(forms.DateField):
widget = JDatePickerWidget
class JDatePickerField(models.DateField):
def formfield(self, **kwargs):
defaults = {'form_class': JDatePicker}
defaults.update(kwargs)
return super(JDatePickerField, self).formfield(**defaults)
如何停止此缓存,以便在重新访问页面时刷新默认字段值?
答案 0 :(得分:3)
你没有发布你的表单代码所以这通常是一个疯狂的猜测,但这种问题通常来自于通过调用{{1}来初始化你的表单的一个字段(或者Queryset或其他)。由于顶级代码(类 - 主体级语句是其中的一部分)仅在导入时执行一次,因此您具有过时值。
(编辑)从下面的评论中,您的问题来自在您的某个模型字段中使用datetime.datetime.now()
。你想传递callable,即default=datetime.datetime.now()
(没有parens),如下所示:https://docs.djangoproject.com/en/1.6/ref/models/fields/#default