小编roc*_*rty的帖子

python 中具有相同签名的方法重载

class testClass(object):
    def test1(self):
        print "1"
    def test1(self):
        print "2"
    def test1(self):
        print "3"
Run Code Online (Sandbox Code Playgroud)

这是一个包含三个方法的类,这些方法都具有相同的名称(甚至相同的签名)

当我这样称呼时:

tc = testClass()
tc.test1()
Run Code Online (Sandbox Code Playgroud)

它不会抛出任何错误,而是简单打印3

再举一个例子:

class testClass(object):
    def test1(self, a, b):
        print "1"
    def test1(self, a):
        print "2"
    def test1(self, a, b, c):
        print "3"
Run Code Online (Sandbox Code Playgroud)

如果我再次调用tc.test1(),它会引发异常:

TypeError: test1() takes exactly 4 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

那么我可以假设在这些情况下它将始终执行类中定义的最后一个方法吗?

PS:我对文件中的各个函数进行了相同的尝试,并得到了相同的结果,它执行了最后一个函数。

python overloading python-2.7 python-3.x

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

管理面板中的 django choicefield 过滤器

默认情况下,django 管理员list_filter提供模型选择中可用的所有过滤器。但除了那些我还想要一个过滤器,我们可以说它是“无”过滤器。

class Mymodel:
    char choice field (choices=(('1', 'txt1', '2', 'txt2')), null=True)

class MymodelAdmin(admin.ModelAdmin):
    ...
    list_filter = [..., choice_field, ...]
    ...
Run Code Online (Sandbox Code Playgroud)

这将在管理面板中设置三个过滤器(右侧过滤器)All, 'txt1', 'txt2',. 正确的?如果没有从选择中分配值,我想要再添加一个过滤器“无”。

到目前为止我尝试过的..

class ChoiceFieldFilter(admin.filters.ChoicesFieldListFilter):

    def __init__(self, *args, **kwargs):
        super(ChoiceFieldFilter, self).__init__(*args, **kwargs)

        self.lookup_val = [('', 'None')]

    def queryset(self, request, queryset):
        print self.lookup_val
        print  self.field.flatchoices
        if self.lookup_val == '':
            return queryset.filter(choice_field='')
        else:
            return queryset.filter(choice_field=self.lookup_val)

    def choices(self, cl):
        pass
Run Code Online (Sandbox Code Playgroud)

然后在管理课上

list_filter = [..., ('choice_field', ChoiceFieldFilter), ...]
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我无法None在 django admin 中看到过滤器

python django django-admin

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

如何在 Django 模型字段中强制执行 char(N) 数据类型而不是 varchar(N)

根据 django 文档https://docs.djangoproject.com/en/1.9/topics/db/models/

它是 ORM 创建varchar字段而不是char.

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

和等效的 sql 语句

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
); 
Run Code Online (Sandbox Code Playgroud)

所以在这里我们可以看到它正在使用 varchar,但我可以使用它char。我找不到办法。除了手动更改列

mysql django postgresql django-models django-orm

4
推荐指数
2
解决办法
3566
查看次数