小编Con*_*ius的帖子

允许Django中的空值的唯一字段

我有模型Foo有字段栏.bar字段应该是唯一的,但允许空值,这意味着如果bar字段是null,我想允许多个记录,但如果不是,null则值必须是唯一的.

这是我的模型:

class Foo(models.Model):
    name = models.CharField(max_length=40)
    bar = models.CharField(max_length=40, unique=True, blank=True, null=True, default=None)
Run Code Online (Sandbox Code Playgroud)

这是表的相应SQL:

CREATE TABLE appl_foo
(
    id serial NOT NULL,
     "name" character varying(40) NOT NULL,
    bar character varying(40),
    CONSTRAINT appl_foo_pkey PRIMARY KEY (id),
    CONSTRAINT appl_foo_bar_key UNIQUE (bar)
)   
Run Code Online (Sandbox Code Playgroud)

当使用管理界面创建多个bar为空的foo对象时,它会给出一个错误:"Foo with this Bar已经存在."

但是当我插入数据库(PostgreSQL)时:

insert into appl_foo ("name", bar) values ('test1', null)
insert into appl_foo ("name", bar) values ('test2', null)
Run Code Online (Sandbox Code Playgroud)

这很好用,它允许我插入超过1条记录,条形为空,所以数据库允许我做我想要的,这只是Django模型的错误.有任何想法吗?

编辑

就DB而言,解决方案的可移植性不是问题,我们对Postgres感到满意.我已经尝试设置一个可调用的唯一,这是我的函数返回True/False为特定的bar值,它没有给出任何错误,但是如果它没有任何影响那么缝合.

到目前为止,我已经从bar属性中删除了唯一的说明符并处理了应用程序中的bar唯一性,但仍然在寻找更优雅的解决方案.有什么建议?

django orm django-models

121
推荐指数
7
解决办法
4万
查看次数

无法在python中使用StringIO的read()获取数据

使用Python2.7版本.以下是我的示例代码.

import StringIO
import sys

buff = StringIO.StringIO()
buff.write("hello")
print buff.read()
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,read()不返回任何内容,因为getvalue()返回"hello".任何人都可以帮我解决问题吗?我需要read(),因为我的以下代码涉及读取"n"字节.

python stringio

64
推荐指数
2
解决办法
2万
查看次数

查找小数位的简便方法

有没有一种简单的方法或集成函数来找出浮点数的小数位?

该数字是从字符串中解析出来的,因此一种方法是计算'.'后面的数字.标志,但这对我来说看起来很笨拙.是否有可能从一个float或一个Decimal对象中获取所需的信息?

解决方案(其中之一,当然:))

我选择使用python decimal.Decimal类来帮助解决我的问题:

e = abs(Decimal(string_value).as_tuple().exponent)
Run Code Online (Sandbox Code Playgroud)

注意:这仅适用于构造Decimal的参数是字符串而不是float(这会导致浮点不准确).

非常感谢所有其他贡献.

python string decimal

46
推荐指数
6
解决办法
5万
查看次数

Celery:列出所有任务,计划,活动*和*完成

更新赏金

如果可能的话,我想要一个不涉及监控线程的解决方案.


我知道我可以使用我的应用程序类查看计划活动任务.InspectControl

i = myapp.control.inspect()

currently_running = i.active()
scheduled = i.scheduled()
Run Code Online (Sandbox Code Playgroud)

但我找不到任何功能来显示已经完成的任务.我知道这些信息至少可以暂时访问,因为我可以通过以下方式查找已完成的任务task_id:

>>> r = my task.AsyncResult(task_id=' ... ')
>>> r.state
u'SUCCESS'
Run Code Online (Sandbox Code Playgroud)

如何获得计划,活动和已完成任务的完整列表?或者可能一次列出所有任务?

celery celery-task

22
推荐指数
1
解决办法
1万
查看次数

Django:动态数据库文件

在我的Django项目中,我依赖于第三方应用程序,该应用程序使用已知模式在各种目录中生成SQLite缓存文件.

我想使用Django模型访问这些数据库,但显然我不能使用静态DATABASES设置.

如何在任意路径上动态打开SQLite数据库?

编辑

正如Byron Ruth指出的那样,解决方案是将它django.db.connectionsusingQuerySet中的函数结合使用.

django django-models django-database

15
推荐指数
1
解决办法
4398
查看次数

这个构造(int){1}是如何调用的?

如何(int) { 1 }在C中调用构造?一个猜测是"匿名常数",但这对谷歌没有任何帮助.作为旁注,您可以使用此构造告诉ioctl您要使用值为1的变量:ioctl (..., &(int) { 1 }).

c

13
推荐指数
1
解决办法
180
查看次数

使用setup.py创建不同的分发类型

给出以下(演示)项目布局:

MyProject/
    README
    LICENSE
    setup.py
    myproject/
        ... # packages
    extrastuff/
        ... # some extra data
Run Code Online (Sandbox Code Playgroud)

我如何(以及在​​何处)声明不同的分布类型?特别是我需要这两个选项:

  1. 仅包含源的分发

  2. 包含源和所有数据文件的分发(extrastuff)

理想情况下,如何声明上面两个配置,而第二个配置取决于第一个配置?

python setuptools setup.py

12
推荐指数
1
解决办法
2039
查看次数

作为模板参数,加上可变参数模板参数

我正在编写一个通用函数包装器,它可以将任何函数包装到具有该形式的lua样式调用中

int lua_function(lua_State*L)

我希望包装函数是即时生成的,所以我想将函数作为模板参数传递.如果你知道参数的数量(例如2),这是微不足道的:

template <typename R, typename Arg1, typename Arg2, R F(Arg1, Args)>
struct wrapper
Run Code Online (Sandbox Code Playgroud)

但是,我不知道这个数字,所以我请求variadic模板参数求助

// This won't work
template <typename R, typename... Args, R F(Args...)>
struct wrapper
Run Code Online (Sandbox Code Playgroud)

上面的内容不会编译,因为variadic参数必须是最后一个.所以我使用两个级别的模板,外部模板捕获类型,内部模板捕获函数:

template <typename R, typename... Args>
struct func_type<R(Args...)>
{
  // Inner function wrapper take the function pointer as a template argument
  template <R F(Args...)>
  struct func
  {
    static int call( lua_State *L )
    {
      // extract arguments from L
      F(/*arguments*/);
      return 1;
    }
  };
};
Run Code Online (Sandbox Code Playgroud)

这是有效的,除了包装像这样的函数

double sin(double d) {} …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

11
推荐指数
1
解决办法
4880
查看次数

在vim中使用Taglist插件时发生错误

我是vim的新手,我从这里安装了一个名为Taglist的插件

当我重新启动我的vim时,会发生错误:

Taglist:在PATH中找不到令人兴奋的ctags(http://ctags.sf.net).插件未加载.

怎么解决这个?

vim

10
推荐指数
1
解决办法
6445
查看次数

参数是URL或路径

Python当我有一个命令行应用程序采用一个参数时,标准做法是什么

网页的URL

要么

磁盘上某处的HTML文件的路径

(只有一个)

代码足够了吗?

if "http://" in sys.argv[1]:
  print "URL"
else:
  print "path to file"
Run Code Online (Sandbox Code Playgroud)

python argv

9
推荐指数
2
解决办法
7758
查看次数