小编Jac*_* M.的帖子

自定义QuerySet和Manager而不会破坏DRY?

我正试图找到一种方法来实现自定义QuerySet和自定义Manager而不会破坏DRY.这是我到目前为止:

class MyInquiryManager(models.Manager):
    def for_user(self, user):
        return self.get_query_set().filter(
                    Q(assigned_to_user=user) |
                    Q(assigned_to_group__in=user.groups.all())
                )

class Inquiry(models.Model):   
    ts = models.DateTimeField(auto_now_add=True)
    status = models.ForeignKey(InquiryStatus)
    assigned_to_user = models.ForeignKey(User, blank=True, null=True)
    assigned_to_group = models.ForeignKey(Group, blank=True, null=True)
    objects = MyInquiryManager()
Run Code Online (Sandbox Code Playgroud)

这很好,直到我做这样的事情:

inquiries = Inquiry.objects.filter(status=some_status)
my_inquiry_count = inquiries.for_user(request.user).count()
Run Code Online (Sandbox Code Playgroud)

这会立即打破一切,因为QuerySet它没有相同的方法Manager.我已经尝试创建一个自定义QuerySet类,并在其中实现它MyInquiryManager,但我最终复制了所有的方法定义.

我也发现这个片段有效,但我需要传递额外的参数,for_user因此它会因为重新定义而严重依赖get_query_set.

有没有办法在不重新定义子类QuerySetManager子类中的所有方法的情况下执行此操作?

django django-models django-queryset django-managers

49
推荐指数
5
解决办法
3万
查看次数

覆盖User对象上的默认get_absolute_url?

我正在尝试为列出django_tables对象创建一个通用表.我已经完成了所有工作,除了get_absolute_urls()我的User对象返回:

/users/<username>/
Run Code Online (Sandbox Code Playgroud)

虽然我可以创建此URL,但它与网站布局的其余部分不匹配,所以我正在寻找另一种方法来执行此操作.有没有办法在不破坏内置身份验证和其他功能的情况下覆盖此值?

django django-urls django-authentication

28
推荐指数
1
解决办法
3579
查看次数

对JavaScript表单构建器的建议?

我希望将表单生成器集成到我正在使用的站点中,但我希望找到一个具有我正在寻找的部分或大部分功能的库.

我正在寻找一个库,它将为我提供一个很好的GUI来构建表单,以及一个JSON(或XML,或类似的)输出,我可以在django后端使用它.我打算用它django来输出完成的表格.

我试过通过谷歌运行这个,但这只会让那些通过在线创建和托管表单而创业的公司产生.但没有任何形式的图书馆.

有什么建议?

javascript javascript-framework

27
推荐指数
5
解决办法
4万
查看次数

从任务中恢复失败超出max_retries

我试图异步使用Web服务,因为它需要45秒才能返回.不幸的是,这个Web服务也有些不可靠,可能会出错.我已经设置django-celery并执行了我的任务,这些工作正常,直到任务失败max_retries.

这是我到目前为止:

@task(default_retry_delay=5, max_retries=10)
def request(xml):
    try:
        server = Client('https://www.whatever.net/RealTimeService.asmx?wsdl')
        xml = server.service.RunRealTimeXML(
            username=settings.WS_USERNAME,
            password=settings.WS_PASSWORD,
            xml=xml
        )
    except Exception, e:
        result = Result(celery_id=request.request.id, details=e.reason, status="i")
        result.save()
        try:
            return request.retry(exc=e)
        except MaxRetriesExceededError, e:
            result = Result(celery_id=request.request.id, details="Max Retries Exceeded", status="f")
            result.save()
            raise
    result = Result(celery_id=request.request.id, details=xml, status="s")
    result.save()
    return result
Run Code Online (Sandbox Code Playgroud)

不幸的是,MaxRetriesExceededError没有被抛出retry(),所以我不知道如何处理这项任务的失败.Django已经将HTML返回给客户端,我正在检查Result通过AJAX 的内容,它永远不会达到完全失败f状态.

所以问题是:当Celery任务超过时,如何更新我的数据库max_retries

django celery django-celery

21
推荐指数
4
解决办法
9753
查看次数

MySQL"发送数据"非常慢

我有一张中等大小的桌子,目前有277k的记录,我正在尝试FULLTEXT搜索.搜索似乎非常快,直到它进入发送数据阶段.

桌子:

CREATE TABLE `sqinquiries_inquiry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ts` datetime NOT NULL,
  `names` longtext NOT NULL,
  `emails` longtext NOT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `sqinquiries_inquiry_search` (`names`,`emails`)
) ENGINE=MyISAM AUTO_INCREMENT=305560 DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT * FROM `sqinquiries_inquiry` WHERE (
  MATCH (`sqinquiries_inquiry`.`names`) AGAINST ('smith' IN BOOLEAN MODE) OR
  MATCH (`sqinquiries_inquiry`.`emails`) AGAINST ('smith' IN BOOLEAN MODE)
) ORDER BY `sqinquiries_inquiry`.`id` DESC LIMIT 100
Run Code Online (Sandbox Code Playgroud)

简介:( 我剪掉了看似无用的信息)

+-------------------------+----------+
| Status                  | Duration |
+-------------------------+----------+
| preparing               | 0.000014 | …
Run Code Online (Sandbox Code Playgroud)

mysql sql

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

有效创建批量数据库条目?

我正在尝试Activty为一个大型(一次300多个)Inquiry对象列表创建一个对象.我有一个ModelForm被回发的单一,我需要创建单独的实例,并将它们附加到我的Inquiry通过a GenericForeignKey.我们来看一些代码:

models.py:

class InquiryEntry(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField() 
    entry = generic.GenericForeignKey('content_type', 'object_id')

class Inquiry(models.Model):
    entries = models.ManyToManyField('InquiryEntry')
    # And many more fields.
    def add_entry(self, obj):
        entry = self.entries.create(entry=obj)
        self.save()
        return entry

class Activity(models.Model):  
    ts = models.DateTimeField(auto_now_add=True)                  
    due_date = models.DateField(auto_now=False)
    ## And many more fields.
Run Code Online (Sandbox Code Playgroud)

views.py:

def bulk_create_activities(request):
    activity_form = ActivityForm()
    if request.method == "POST":
        activity_form = ActivityForm(request.POST)
        if activity_form.is_valid():    
            pks = [int(x) for x in request.POST.get('pks', '').split(',')]
            for …
Run Code Online (Sandbox Code Playgroud)

django

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

{%cycle%}解决嵌套for循环问题?

我在Django {% cycle %}模板标签中遇到了一个有趣的"疏忽" .这被列为一个错误,但我想知道是否有一个解决方法呢?

{% for r1 in range_0_2 %}
  {% for r2 in range_0_3 %}
   {{ r1 }}-{{ r2 }}-{{ cycle 'even' 'odd' }}
  {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这会产生:

0-0-even
0-1-odd
0-2-even
1-0-odd
1-1-even
1-2-odd
Run Code Online (Sandbox Code Playgroud)

它应该产生:

0-0-even
0-1-odd
0-2-even
1-0-even
1-1-odd
1-2-even
Run Code Online (Sandbox Code Playgroud)

django django-templates

7
推荐指数
1
解决办法
2669
查看次数

带有lxml的子路径的XPath谓词?

我正在尝试理解和发送给我使用ACORD XML表单(保险中的通用格式)的XPath.他们发给我的XPath是(为简洁而截断):

./PersApplicationInfo/InsuredOrPrincipal[InsuredOrPrincipalInfo/InsuredOrPrincipalRoleCd="AN"]/GeneralPartyInfo
Run Code Online (Sandbox Code Playgroud)

我遇到麻烦的地方是Python的lxml告诉我这[InsuredOrPrincipalInfo/InsuredOrPrincipalRoleCd="AN"]是一个invalid predicate.我无法在XPath规范中的任何地方找到标识此语法的谓词,以便我可以修改此谓词.

是否有关于此谓词选择的文档?此外,这甚至是一个有效的谓词,还是在某个地方被破坏了?

可能相关:

我相信我正在使用的公司是一个MS商店,所以这个XPath可能在C#或该堆栈中的其他语言中有效吗?我不完全确定.

更新:

根据评论需求,这里有一些额外的信息.

XML示例:

<ACORD>
  <InsuranceSvcRq>
    <HomePolicyQuoteInqRq>
      <PersPolicy>
        <PersApplicationInfo>
            <InsuredOrPrincipal>
                <InsuredOrPrincipalInfo>
                    <InsuredOrPrincipalRoleCd>AN</InsuredOrPrincipalRoleCd>
                </InsuredOrPrincipalInfo>
                <GeneralPartyInfo>
                    <Addr>
                        <Addr1></Addr1>
                    </Addr>
                </GeneralPartyInfo>
            </InsuredOrPrincipal>
        </PersApplicationInfo>
      </PersPolicy>
    </HomePolicyQuoteInqRq>
  </InsuranceSvcRq>
</ACORD>
Run Code Online (Sandbox Code Playgroud)

代码示例(使用完整的XPath而不是代码段):

>>> from lxml import etree
>>> tree = etree.fromstring(raw)
>>> tree.find('./InsuranceSvcRq/HomePolicyQuoteInqRq/PersPolicy/PersApplicationInfo/InsuredOrPrincipal[InsuredOrPrincipalInfo/InsuredOrPrincipalRoleCd="AN"]/GeneralPartyInfo/Addr/Addr1')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "lxml.etree.pyx", line 1409, in lxml.etree._Element.find (src/lxml/lxml.etree.c:39972)
  File "/Library/Python/2.5/site-packages/lxml-2.3-py2.5-macosx-10.3-i386.egg/lxml/_elementpath.py", line 271, in find
    it = …
Run Code Online (Sandbox Code Playgroud)

python xml xpath lxml

7
推荐指数
1
解决办法
7424
查看次数

通过htmldoc在每个页面上重复thead

我正在试图找出如何在htmldoc的每一页输出上重复一组表头.我插入CSS方式(下面)看看是否可行,但我不相信htmldoc对CSS做了很多事情.

基本问题是:在输出到PDF时,有没有办法让htmldoc像这个CSS一样?

thead {display: table-header-group;}
Run Code Online (Sandbox Code Playgroud)

html pdf htmldoc

6
推荐指数
1
解决办法
865
查看次数

从环境变量配置Dancer?

我是Dancer的新手,但我正在尝试将其配置为在Docker容器中工作.因此,我需要从环境中获取数据库设置.

在我的情况下,我有DB_PORT_3306_TCP_ADDR,DB_PORT_3306_TCP_PORT来自Docker.不幸的是,Dancer::Plugin::Database在我可以更改数据库以使用这些变量之前,模块是错误的.

use Dancer ':syntax';
use Dancer::Plugin::Database;

if ($ENV{DB_PORT_3306_TCP}) {## Connected via docker.
    database->({
        driver => 'mysql',
        username => 'username',
        password => 'password',
        host => $ENV{DB_PORT_3306_TCP_ADDR},
        port => $ENV{DB_PORT_3306_TCP_PORT},
        database => $ENV{DB_ENV_MYSQL_DATABASE},
    });
}
Run Code Online (Sandbox Code Playgroud)

所以问题是,有没有一种很好的方法从环境变量配置Dancer,而不是通过静态YAML?

perl dancer docker

6
推荐指数
1
解决办法
594
查看次数