我正在尝试设置一个GeoDjango应用程序来测试我遇到的早期问题.我已经建立了一个postgresql数据库,创建了一个新的Django项目和应用程序,但是当我尝试时./manage.py syncdb我得到了这个:
django.core.exceptions.ImproperlyConfigured:无法确定数据库"django_geotest"的PostGIS版本.GeoDjango至少需要PostGIS 1.3版.是否从空间数据库模板创建了数据库?
我不明白,因为我之前已经完成了GeoDjango的所有安装要求,并django_geotest通过这样做创建了这个数据库:
$ createdb -T template_postgis django_geotest
Run Code Online (Sandbox Code Playgroud)
看起来数据库设置正确:
django_geotest=# SELECT PostGIS_full_version();
postgis_full_version
-------------------------------------------------------------------------------------------------------
POSTGIS="1.5.3" GEOS="3.2.2-CAPI-1.6.2" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS
(1 row)
Run Code Online (Sandbox Code Playgroud)
描述数据库,我得到这个:
django_geotest=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | geography_columns | view | phil
public | geometry_columns | table | phil
public | spatial_ref_sys | table | phil
(3 rows)
Run Code Online (Sandbox Code Playgroud)
所以现在我不知道接下来要尝试什么...我对postgresql及其模板等的了解并不是那么好.有任何想法吗?谢谢.
我有一个Django(v1.4,使用Postgresql)项目,我已经写了一堆工作单元测试.这些使用FactoryBoy生成大部分数据.
我现在开始使用带有Selenium的LiveServerTestCase编写一些集成测试.我刚刚意识到我的测试和实时测试服务器使用不同的数据库.这意味着我的测试中工厂创建的数据不适用于Selenium.
我不确定最好的进步方式.我想我可以使用灯具来提供可行的数据,尽管这是一个很难用到工厂而已.
有没有办法可以继续使用工厂来生成适用于我的Selenium测试的数据?我真的希望我的测试和LiveServerTestCase使用相同的数据库.
我用d3画线图,一切正常.但是,我必须在图表区域的左侧留下足够的边距,以适应我认为可能是最宽的y轴文本标签.我想根据最宽的标签调整每个图表的空间.
最初我以为我可以找到最大的y值,创建一个隐藏的文本对象,计算出它的宽度,并在创建图表时将该值用于左边距.有点讨厌,但它让我有价值.
但是,如果最大y值是,例如"1598.538",则最顶部的y轴标签可能是"1500"......即,要窄得多.
所以我想我想找到实际上最顶级标签的宽度.但是我不知道如何在不绘制图表和轴的情况下做到这一点,测量宽度,并再次绘制它.这听起来很讨厌!有一种非讨厌的方法吗?
UPDATE
这是我的代码的一部分,使用Lars的建议,只是为了显示它适合的位置:
// I did have
// `.attr("transform", "translate(" + margin.left + "," + margin.top ")")`
// on the end of this line, but I've now moved that to the bottom.
var g = svg.select("g");
// Add line paths.
g.selectAll(".line").data(data)
.enter()
.append("path")
.attr("d", line);
// Update the previously-created axes.
g.select(".axis-x")
.attr("transform", "translate(0," + yScale.range()[0] + ")"))
.call(xAxis);
g.select(".axis-y")
.call(yAxis);
// Lars's suggestion for finding the maximum width of a y-axis label:
var maxw = 0;
d3.select(this).select('.axis-y').selectAll('text').each(function(){ …Run Code Online (Sandbox Code Playgroud) 我在d3中绘制了一个简单的条形图,带有竖条:http://jsfiddle.net/philgyford/LjxaV/2/
然而,它正在绘制条形图,基线位于图表的顶部.
我已经读过要反转它,从底部绘制,我应该改变range()y轴.所以,改变这个:
.range([0, chart.style('height')]);
Run Code Online (Sandbox Code Playgroud)
对此:
.range([chart.style('height'), 0]);
Run Code Online (Sandbox Code Playgroud)
然而,看起来它正在绘制图表的反转 - 在每个条形图上方的空间中绘制,并使条形图本身(从底部绘制)保持透明.我究竟做错了什么?
我遇到了Vagrant使用的shell配置脚本的问题,因为它没有执行source /home/vagrant/.bashrc.我把问题减少到了这个......
在我的VM中,我有一个文件/home/vagrant/testfile包含:
echo "In testfile"
Run Code Online (Sandbox Code Playgroud)
最后/home/vagrant/.bashrc我有这个:
echo "In .bashrc"
Run Code Online (Sandbox Code Playgroud)
这两个文件都归vagrant用户所有.
在我的一个Vagrant配置shell脚本中,我有:
echo "Hello"
source /home/vagrant/testfile
source /home/vagrant/.bashrc
echo "Goodbye"
Run Code Online (Sandbox Code Playgroud)
跑步vagrant provision给出了这个:
Hello
In testfile
Goodbye
Run Code Online (Sandbox Code Playgroud)
当我这样做vagrant ssh然后/home/vagrant/.bashrc像往常一样运行,我自动看到:
In .bashrc
Run Code Online (Sandbox Code Playgroud)
那么为什么source /home/vagrant/.bashrc在我的配置脚本中没有效果呢?
我有一个天真的日期和时间,格式为'2012-05-19 19:13:00',需要使用Django 1.4及其时区感知功能存储它.
虽然无法知道日期最初的时区,但将它存储为UTC似乎是有意义的.
但是,使用pytz等,我不知道如何将没有时区的日期转换为UTC日期时间.
我很困惑为什么用冻结枪冻结时间的函数根据是否datetime.datetime.utcnow()被调用输出不同的UTC时间,或者datetime.datetime.now(pytz.utc).我不是说它坏了,只是因为我不明白为什么,而且想知道!
例如,使用此功能:
@freeze_time("2012-01-14 03:21:34", tz_offset=-4)
def test():
print("utcnow(): %s" % datetime.datetime.utcnow())
print("pytz.utc: %s" % datetime.datetime.now(pytz.utc))
Run Code Online (Sandbox Code Playgroud)
输出是:
utcnow(): 2012-01-14 03:21:34
pytz.utc: 2012-01-13 23:21:34+00:00
Run Code Online (Sandbox Code Playgroud)
我想第一个是天真的约会时间,但为什么它们的时间不同?
(最终为什么我想知道:如果我在我的测试中使用freezegun,并且我在我的代码中使用pytz生成时间进行测试,我想知道它的"正确"行为应该是什么.)
我在 Django 中使用内联表单集,并且对于每个显示一个“额外”表单的项目,用于添加另一个对象。
现有对象的表单具有“删除”复选框,用于删除该对象,这是有道理的。
但“额外”表单也有这些“删除”复选框......这没有任何意义,因为没有任何东西可以删除。Django 管理中的内联表单不会为“额外”表单显示这些“删除”复选框。
如何删除“额外”内联表单上的这些复选框?
我的模板的内联表单集部分是这样的(GitHub 上的简化完整版本):
{% for bookimage_form in form.forms %}
{% for hidden_field in bookimage_form.hidden_fields %}
{{ hidden_field.errors }}
{% endfor %}
{{ bookimage_form.as_table }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这是似乎多余的“删除”复选框:
我正在尝试使用以下启动的 Dockerfile 构建 PHP 5.3/Apache 供本地使用:
FROM php:5.3-apache
RUN apt-get update && \
apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev
Run Code Online (Sandbox Code Playgroud)
但是当“阅读包列表”时我得到:
W: GPG error: http://security.debian.org jessie/updates InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9D6D8F6BC857C906 NO_PUBKEY AA8E81B4331F7F50
W: GPG error: http://http.debian.net jessie-updates InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7638D0442B90D010
W: GPG error: http://http.debian.net jessie Release: The following signatures couldn't be …Run Code Online (Sandbox Code Playgroud) 我有一些Django管理命令,这些命令调用其他类中的方法以从API中获取数据。这些任务可能要花很长时间才能完成,我想以简洁的方式在控制台中显示进度。
我可以使用print()类似这样的方法来输出像“ Fetched 22 of 3000”这样的一行,该行覆盖自身:
print('Fetched %d of %d' % (n, total) + ' '*30, end='\r')
Run Code Online (Sandbox Code Playgroud)
但是使用print()似乎有点令人讨厌,并且在运行测试时它会输出到控制台。因此,使用日志记录似乎更好,但是我看不到使用该方法在控制台中显示单个不断更新的“进度”行的方法。
有没有很好的方法可以做到这一点?