小编Dan*_*aab的帖子

带有自定义项和自定义项窗口小部件的QListView/QListWidget

我正在编写PyQt应用程序,但在创建自定义列表视图时遇到了一些麻烦.我希望列表包含任意小部件(特别是一个自定义小部件).我该怎么做?

似乎替代方案是创建一个包含在滚动条中的表格或网格视图.但是,我希望能够利用模型/视图方法以及嵌入(树视图)支持内置函数句柄.

为了澄清,自定义小部件是交互式的(包含按钮),因此解决方案不仅仅需要绘制小部件.

qt pyqt qlistwidget qlistview qitemdelegate

31
推荐指数
3
解决办法
4万
查看次数

使用flask-restful RequestParser进行嵌套验证

使用burn-restful微框架,我在构建一个RequestParser验证嵌套资源的问题时遇到了麻烦.假设表单的预期JSON资源格式:

{
    'a_list': [
        {
            'obj1': 1,
            'obj2': 2,
            'obj3': 3
        },
        {
            'obj1': 1,
            'obj2': 2,
            'obj3': 3
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

每个项目a_list对应一个对象:

class MyObject(object):
    def __init__(self, obj1, obj2, obj3)
        self.obj1 = obj1
        self.obj2 = obj2
        self.obj3 = obj3
Run Code Online (Sandbox Code Playgroud)

...然后,可以使用以下形式创建RequestParser:

from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('a_list', type=MyObject, action='append')
Run Code Online (Sandbox Code Playgroud)

...但是你如何验证MyObject里面每个字典的嵌套a_list?或者,这是错误的方法吗?

对应的API对应于将每个处理MyObject为对象文字,并且可能有一个或多个传递给服务; 因此,扁平化资源格式不适用于这种情况.

python rest flask flask-restful

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

如何动态检索Django模型类?

如果没有Django模型的完整模块路径,是否可以执行以下操作:

model = 'User' [in Django namespace]
model.objects.all()
Run Code Online (Sandbox Code Playgroud)

......而不是:

User.objects.all().
Run Code Online (Sandbox Code Playgroud)

编辑:我试图根据命令行输入进行此调用.是否可以避免导入声明,例如,

model = django.authx.models.User
Run Code Online (Sandbox Code Playgroud)

没有Django返回错误:

"global name django is not defined."
Run Code Online (Sandbox Code Playgroud)

python django django-models django-queryset

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

动态更新ModelForm的Meta类

我希望从我的视图中动态更新ModelForm的内联Meta类.尽管此代码似乎更新在Meta类中的排除列表,从输出as_p(),as_ul()等不反映更新的Meta排除.

我假设在创建ModelForm时不是在as_*()调用时生成html .有没有办法强制更新HTML?

这甚至是最好的方法吗?我只是假设这应该工作.

思考?

from django.forms import ModelForm

from testprogram.online_bookings.models import Passenger

class PassengerInfoForm(ModelForm):

    def set_form_excludes(self, exclude_list):
        self.Meta.exclude = excludes_list

    class Meta:
        model = Passenger
        exclude = []
Run Code Online (Sandbox Code Playgroud)

python django metaprogramming django-forms modelform

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

Postgresql JSONB即将推出.现在用什么?Hstore?JSON?EAV?

在完成关系DB/NoSQL研究辩论之后,我得出的结论是,我将继续将PG作为我的数据存储.该决定的一个重要部分是宣布JSONB达到9.4.我的问题是我现在应该怎么做,从头开始构建一个应用程序,知道我想要迁移到(我的意思是现在使用!)jsonb?对我来说,DaaS选项将会运行9.3.

从我所知道的,并纠正我,如果我错了,hstore会运行得更快,因为我将在hstore列中对许多键进行大量查询,如果我要使用普通的json我就不会能够利用索引/ GIN等.但是我可以利用json嵌套,但运行任何查询都会非常慢,用户会感到沮丧.

那么,我是否围绕当前版本的hstore或json数据类型,"good ol"EAV或其他东西构建我的应用程序?我应该以某种方式构建我的数据库和应用程序代码吗?任何建议将不胜感激.我相信其他人可能会面临同样的问题,因为我们等待PostgreSQL的下一次正式发布.

关于我想要构建的应用程序的一些额外细节:

- 非常关系(下面有一个例外) -
强大的社交网络方面(群组,朋友,喜欢,时间轴等) -
基于具有可变用户分配属性的单个对象,可能是10或1000+(这是无模式设计的地方)需要发挥作用)

提前感谢任何输入!

postgresql json hstore jsonb

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

Django:任意数量的未命名urls.py参数

我有一个Django模型,包含大量字段和20000多个表行.为了方便人类可读的URL以及将大型列表分解为任意子列表的能力,我希望有一个如下所示的URL:

/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
Run Code Online (Sandbox Code Playgroud)

其中'name'映射到model属性,'value'是该属性的搜索条件.每个"名称"将被视为类别,以返回类别匹配的模型实例的子集.

现在,这可以用GET参数处理,但我更喜欢用户和搜索引擎更可读的URL.这些URL子集将嵌入显示此模型的每个页面上,因此制作漂亮的URL似乎是值得的.

理想情况下,每个名称/值对将作为名为name1,name2等的参数传递给视图函数.但是,我不相信可以通过正则表达式的匹配文本定义命名模式.我错了吗?

所以,似乎我需要做这样的事情:

urlpatterns = patterns('',
    url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
Run Code Online (Sandbox Code Playgroud)

看来这应该匹配任意两个名称/值对的集合.虽然它成功匹配,但它只将最后一个名称/值对作为参数传递给视图函数.我的猜测是每场比赛都会覆盖上一场比赛.在包含(?:...)+导致它的猜测下,我尝试了一个简单的重复模式:

urlpatterns = patterns('',
    url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)
Run Code Online (Sandbox Code Playgroud)

...并且遇到了同样的问题,但这次*args只包括最后匹配的模式.

这是Django的url调度程序和/或Python的正则表达式支持的限制吗?似乎这些方法中的任何一个都应该有效.有没有办法实现这一点,而无需将URL中的每个可能的模型属性硬编码为可选(.*)模式?

python django django-urls

18
推荐指数
1
解决办法
5444
查看次数

如何消除渲染后的"闪烁"?

我已经尽力使用Javascript/Ajax技术成为纯粹主义者,确保所有Ajax-y行为都是基本功能的增强,而当Javascript被禁用时,该站点也完全正常运行.但是,这会导致一些问题.

在某些情况下,只有在浏览器中启用Javascript时,才能看到DOM节点.在其他情况下,它应该仅在禁用时可见.以表格上的提交按钮为例,该表单具有自动提交的onchange处理程序(使用JQuery的表单插件):

<form method="post" action=".">
    <label for="id_state">State:</label>
    <select name="state" id="id_state" onchange="$(this.form).ajaxSubmit(ajax_submit_handler);">
        <option value="AL">Alabama</option>
        <option value="AK">Alaska</option>
    </select>
    <input class="with_js_disabled" type="submit" value="OK" />
</form>
Run Code Online (Sandbox Code Playgroud)

和Javascript:

<script type="text/javascript">
    $(document).ready(function()
    {
        $(".with_js_disabled").hide();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

启用Javascript时,不需要提交按钮(由于onchange处理程序).但是,JQuery的$(document).ready函数(以及更直接的document.onload)仅在页面完全加载和呈现后调用 - 因此,最初显示提交按钮,当Javascript为时,会出现"flash"执行并且节点的显示设置为"none".

我接受这是做生意的成本,并没有找到解决办法.但是有一种我不知道的技术可以最大限度地减少效果,甚至可以直接消除它吗?

编辑:

<noscript>下面很多人提到的解决方案似乎很有希望,但在Safari上并不适合我.然而Prestaul的第二个建议很有效:

<body>
    <script type="text/javascript">
        document.body.className += ' has_js';
    </script>
    <!-- the rest of your page -->
</body>
Run Code Online (Sandbox Code Playgroud)

然后可以使用直接CSS设置样式:

body .js_enabled_only { display: none; }
body .js_disabled_only { display: block; }
body.has_js .js_enabled_only { display: block; }
body.has_js .js_disabled_only { display: none; }
Run Code Online (Sandbox Code Playgroud)

第二行仅供参考,可以(并且应该)删除,以避免不应显示元素的情况:块.同样,对于其他显示样式,您可能需要在第三行上使用不同的变体.但是这个解决方案很干净,IMO,在我的测试中完全消除了闪烁效应.

html javascript ajax jquery dom

16
推荐指数
2
解决办法
5069
查看次数

如何向Django站点中的匿名用户发送会话消息?

我经常使用以下方式向我的Django应用程序视图中的用户操作显示用户操作的消息:

request.user.message_set.create("message to user")
Run Code Online (Sandbox Code Playgroud)

我怎么能为匿名(未登录)用户做同样的事情?匿名用户没有request.user,但Django文档说使用"会话"中间件你可以做与上面代码相​​同的事情.链接到会话中间件的Django文档声称它是可能的,但我无法从会话文档中找到如何做到这一点.

python django session django-views

6
推荐指数
2
解决办法
2086
查看次数

Django:在事务中保存多个ManyToMany字段

这是我的模型的代表:

class B(models.Model):
   """I'm a dummy model, so doesn't pay atention of what I do"""
   name = models.CharField(max_length=250)

class A(models.Model):
   name = models.CharField(max_length=250)
   many_b = models.ManyToManyField(B)
Run Code Online (Sandbox Code Playgroud)

现在,假设我有一个B对象列表.还有一个ABs 相关的对象.像这样的东西:

a = A.objects.get(id=1)
list_of_b = [B<name='B1'>,B<name='B2'>,B<name='B3'>,]
Run Code Online (Sandbox Code Playgroud)

我现在与他们联系的方式是这样的:

for b_object in list_of_b:
   a.many_b.add(b_object)
Run Code Online (Sandbox Code Playgroud)

有没有办法在单个事务中添加所有B对象?也许在一个方法中,例如:

a.many_b.addList(b) #This doesn't exist
Run Code Online (Sandbox Code Playgroud)

python django model manytomanyfield

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

使用Mongoengine添加和更新ListField

使用Mongoengine并尝试形成标签云.对于每个项目,我想附加一个或多个标签.这里使用类似标签的东西(在每个问题下面).

在这里搜索和阅读了很多帖子后,我仍然无法正确地将新条目添加到ListField,或者如何替换它们.

class Item(Document):
    tags = ListField(StringField(max_length=300))
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过使用表单推送一个或多个新标签并收集发布的结果.在我的views.py中,我有以下检查:

if 'tags' in request.POST and request.POST['tags'] <> '':
   for Tag in request.POST.getlist('tags'):
       ItemData.update(push__tags__S__tags=Tag)
Run Code Online (Sandbox Code Playgroud)

尝试推送时,它失败了:

ValidationError(配置文件:5185505b73ea128e878f4e82)(列表字段中只能使用列表和元组:['tags'])

显然我使用的是错误的类型,但我迷失了如何解决这个问题.奇怪的是,由于某种原因,数据被附加到记录中..(发布"测试"和刷新浏览器)

"tags":["test","test"]}

可以向我展示一个小例子如何处理发布的字符串(来自HTML表单)并将其正确地推送到ListField(以及如何将它们全部替换).

谢谢!

listfield mongoengine

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

为用户提供"声誉系统" - 我应该......?

我正在考虑为我的Django Web应用程序添加一个信誉系统; 该网站已被使用,所以我试图小心我的选择.

在所有对站点有贡献的操作中生成信誉,类似于Stackoverflow的系统.

我知道有数以百万计的方法来实现这一点,这就是为什么我感到很失落.

我不确定的两个选择是:

  • 跟踪声誉增加的原因
  • 忽略原因以降低网站的复杂性和开销

一些指针和方向会很高兴.非常感谢!

python django web-applications

5
推荐指数
2
解决办法
473
查看次数

如何将与AJAX请求相对应的错误传递给客户端并在客户端处理?

我有以下表格供我的用户更改他们的电子邮件地址.

<form enctype="multipart/form-data" id="email_change_form" method="post" action="/my_account/">
<table> 
<tr> 
  <td> 
    <label for="id_email">E-mail address</label>:
  </td> 
  <td> 
    <input name="email" value="a@a.com" maxlength="75" type="text" id="id_email" size="30" /> 
  </td> 
  <td class="error_email">
  </td> 
</tr> 
</table> 
<input type="hidden" name="form_id" value="email_change_form" /> 
</form>
Run Code Online (Sandbox Code Playgroud)

单击保存按钮(其代码未显示)后,表单将使用以下jQuery代码ajaxly发布到服务器:

$(".save_button").click(function() {
    var $form = $("#email_change_form")
    url = $form.attr("action");

    $.post(url, $form.serialize(), 
      function(data) {
          //upon success, the server returns the new email (data.email) in a json dictionary. 
        },
        "json"
      );      
    }
  })
Run Code Online (Sandbox Code Playgroud)

一旦服务器收到POST,它就需要验证新电子邮件在数据库中是否已经存在(即电子邮件需要是唯一的).假设服务器检测到重复的电子邮件,我不知道如何将错误传回客户端.我很想在json字典中添加一个条目"duplicate_email:true"并将其返回给客户端.我不知何故觉得这不是正确的做法.

请为此方案建议正确的方法.服务器应该如何将错误传递回客户端?如何在客户端捕获错误?谢谢.

django ajax jquery

3
推荐指数
1
解决办法
3045
查看次数

django模型形式

我有一个非常简单的模型形式,但由于某种原因,代码无法syncdb并抛出错误:AttributeError:'module'对象没有属性'CharField'

代码如下(在我的models.py中):

from django.db import models
from django.forms import ModelForm, Textarea, forms
from django.forms.fields import DateField, ChoiceField, MultipleChoiceField

class SubmitJobDTP(models.Model):
    SERVICE_CHOICES = (
        ('blog', (
            ('DTP1', 'cccccccccccccccccc: GBP 65.00'),
            ('DTP2', 'vvvvvvvvvvvvvvvvvv: GBP 110.00'),
            ('DTP3', 'bbbbbbbbbbbbbbbbbb: GBP 175.00'))
        )
    )
    package = models.CharField(max_length=5, choices=SERVICE_CHOICES)
    firstname = models.CharField(max_length=25)
    lastname = models.CharField(max_length=25)
    contact_number = models.CharField(max_length=25)
    email_address = models.EmailField()    
    attachment_1 = models.FileField(upload_to='uploadir')
    attachment_2 = models.FileField(upload_to='uploadir')
    attachment_3 = models.FileField(upload_to='uploadir')
    attachment_4 = models.FileField(upload_to='uploadir')
    attachment_5 = models.FileField(upload_to='uploadir')
    comments = models.CharField(max_length=150)

class SubmitJobForm(ModelForm): 
    attachment_1 = forms.FileField(label='Attach file 1',required=False) …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-models django-forms django-views

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