我使用的 sqlite3 数据库设置如下settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'path/to/config.sqlite',
'TEST_NAME': 'path/to/test-config.sqlite',
# ... USER, PASSWORD and PORT left out for brevity
}
}
Run Code Online (Sandbox Code Playgroud)
在测试运行期间开始于:
python manage.py test myapp.mytest
Run Code Online (Sandbox Code Playgroud)
这会临时创建一个数据库文件path/to/test-config.sqlite,我需要在另一个加载了所需装置的应用程序中使用该文件。
然而,数据库文件是空的,我在一个测试的暂停期间断言:
sqlite> select * from someapp_somemodel;
... no results here :(
Run Code Online (Sandbox Code Playgroud)
其他不需要sqlite文件并且内存数据库就足够的测试用例,不会发生错误。
我的问题:
编辑
如果有任何兴趣,我正在使用 Django 1.3.1。
编辑2
我熟悉fixtures,我用它们来填充数据库,但我的问题是fixtures 中的数据在测试过程中没有写入数据库文件。对不起,如果我对这个事实不够清楚。
编辑3
由于我的问题需要一些澄清,请考虑以下测试设置(与我实际做的很接近):
class SomeTestCase(django.test.TestCase):
fixtures = ["some_fixture.json", "some_other_fixture.json"]
def testSomething(self):
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
当testSomething方法运行到断点时,我启动sqlite3程序并连接到 …
我有一个包含许多外键字段的模型,例如带有字段'type','level','color','intensity'的模型Product(只是一个通用示例).
然后,我有一个页面,使用Type表单编辑给定类型的所有产品,产品作为内联formset,并可选择使用内联添加其他产品extra=10.
我觉得非常奇怪的是,每次当我输出模板上的一个外键选择字段时,Django会查询数据库以获取选项(每次).
例如:
{% for form in formset %}
{{ form.level }}
{{ form.color }}
{{ form.intensity }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
有20个产品(和10个空的额外表格),上面的代码select * from ...从级别,颜色和强度共发出30 个查询(使用Django调试工具栏显示),其中3应该就足够了.这些选项不太可能在请求中改变,但即使它们确实如此,我绝对不希望一些新添加的选项仅出现在最后5个表单中.
有没有办法优化我的模型/表单/视图/模板,以便数据库不会被不必要地敲打?
-
免责声明:我对django和python相对较新,并且不禁想到必须有办法以某种方式解决这个问题.
要使用我的Django应用程序中的相关参数生成一组Javascript变量,我有两个嵌套的for循环:
<script>
{% for model in models %}
{% for item in model.attribute|slice:":3" %}
{% if forloop.first %}
var js_variable{{ forloop.parentloop.counter0 }} = [
{% endif %}
'{{ item.attribute }}' ,
{% if forloop.last %}
{{ item.attribute }} ]
{% empty %}
var js_variable{{ forloop.parentloop.counter0 }} = []
{% endfor %}
{% endfor %}
....code that gets unhappy when js_variable[n] doesn't exist.....
</script>
Run Code Online (Sandbox Code Playgroud)
当{% empty %}发生它似乎没有访问{{ forloop.parentloop. counter0 }}变量,因此变量名称js_variable[n]打印不正确js_variable(没有计数器提供的数字),以后代码抱怨.
是否这个变量在{{ empty …
我一直在开发FatFree框架中的应用程序,现在我正在尝试将其部署在服务器上.当我在localhost上运行时,一切似乎都很好.
但是,当我在服务器上部署它并试图访问它时,它给了我一个奇怪的错误,它是 -
Internal Server Error
chmod(): Operation not permitted
#0 /var/www/webapp/inc/main.php:62 Template::serve('front_page.php')
#1 /var/www/index.php:65 F3::run()
Run Code Online (Sandbox Code Playgroud)
我已经给了该webapp文件夹777的权限,所以chmod()应该被允许.以上表明在提供模板文件时出错front_page.php.
我怎样才能解决这个问题?
我在同一台服务器上使用了几个django实例,每个实例都在virtualenv中.如何启动芹菜服务器并确保它始终运行和更新?即服务器重启或代码更新后?
/etc/init.d脚本和配置文件假定单个Django安装.我必须使用./manage.py celeryd命令吗?
关心西蒙
最近我学习了Werkzeug的交互式调试器,它结合了django_extensions来调试Django Python代码./manage.py runserver_plus.
但是你如何调试模板内部?如果我{{ yasdasdasf }}在模板中添加一些乱码,那么Django会默默地忽略它.更令人讨厌的是当你期望某些东西出现在模板中时,但它并不是因为有错误.
我想我已经阅读了一些关于使用{{ debug }}内部模板或TEMPLATE_STRING_IF_INVALID内部的解决方案settings.py,但是每次想要调试或检查模板中的内容时,这似乎都有很多"打开和关闭".
诸如Django-guardian和django-permissions之类的项目使您能够拥有对象级权限。但是,如果两个对象之间通过父子关系相互关联,则除非另有说明,否则子对象有什么方法可以继承父对象的许可?例如,除非用户为子文件夹明确分配了不同的权限,否则a subfolder应该继承权限parent folder。
使用Django(尤其是Django-guardian模块)完成此操作的最佳方法是什么?
这是我的代码:
urls.py:
from django.conf.urls import patterns
from views import show,showpage
urlpatterns = patterns('',
(r'^$',showpage),
(r'^show/$',show),
)
Run Code Online (Sandbox Code Playgroud)
views.py
from django.http import HttpResponse
def show(request):
arr = reqeust.GET.get('arr','Nothing')
print arr#**it's 'Nothing'**
if arr == 'Nothing':
msg = 'fail'
else:
msg = 'pass'
return HttpResponse(msg)
def showpage(request):
html = ''' <html>
<head>
<script language="javascript" type="text/javascript" src="/site_media/js/jquery-1.7.2.js"></script>
</head>
<body>
<input type="button" id="input_btn"/>
</body>
<script language="javascript" type="text/javascript">
$(function(){
$("#input_btn").bind("click",function(){
arr = [1,2,3,4,5,6]
$.ajax({
type:"GET",
url:"/show/",
data:{arr:arr},//**I want pass the arr to django**
success:function(data){alert(data);},
error:function(data){alert(data);}
}); …Run Code Online (Sandbox Code Playgroud) 来自views.py的代码:
def feedback(request):
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
form.save()
else:
print("form.errors:", form.errors)
else:
form = CommentForm()
articles = Comment.objects.all()
ResponseDict = {"articles": articles, "form": form}
return render_to_response("feedback.html", ResponseDict,
context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这个以及从类似问题的答案中进行了一些修改,但没有任何效果.当我按下提交按钮时,html中的所有表单字段都变为空.
编辑:来自feedback.html的代码:
{% extends "base.html" %}
{% block main %}
<table>
<form action="/feedback/" method="POST">
{% csrf_token %}
<div class="article">
<label for="name">
???? ???:
</label>
<br />
<input type="text" name="name" id="name" size="40" class="inputbox" value="" />
<br />
<!-- class="inputbox required" -->
<textarea class="WithoutTinymce" cols="50" rows="10" name="text" …Run Code Online (Sandbox Code Playgroud) 是否有一种既定的方法可以在self.get_object()稍后在 get/post 中调用时验证调度中的对象而无需进行额外的数据库调用?
这是我到目前为止的内容(针对这个问题略有改动):
class CourseUpdateView(UpdateView):
def dispatch(self, request, *args, **kwargs):
self.request = request
self.kwargs = kwargs
self.object = self.get_object()
if self.object.is_online:
messages.warning(request, "Sorry this one can't be updated")
return redirect("course:detail", pk=self.kwargs['pk'])
# this is going to call self.get_object again isn't it?
return UpdateView.dispatch(self, request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud) django ×9
python ×8
javascript ×2
linux ×2
arrays ×1
cascade ×1
celery ×1
debugging ×1
django-forms ×1
jquery ×1
permissions ×1
php ×1
sqlite ×1