小编Fur*_*tor的帖子

有没有办法否定返回变量的布尔值?

我有一个Django站点,其Item对象具有布尔属性active.我想做这样的事情来将属性从False切换到True,反之亦然:

def toggle_active(item_id):
    item = Item.objects.get(id=item_id)
    item.active = !item.active
    item.save()
Run Code Online (Sandbox Code Playgroud)

此语法在许多基于C的语言中有效,但在Python中似乎无效.还有其他方法可以在不使用的情况下执行此操作:

if item.active:
    item.active = False
else:
    item.active = True
item.save()
Run Code Online (Sandbox Code Playgroud)

本机python neg()方法似乎返回整数的否定,而不是布尔值的否定.

谢谢您的帮助.

python django

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

Django:访问给定字段的选择元组

我想获取当前未选择的选项的选择字段的命名值.这可能吗?

例如:models.py

FILE_STATUS_CHOICES = (
    ('P', 'Pending'),
    ('A', 'Approved'),
    ('R', 'Rejected'),
)

class File(models.Model):
    status = models.CharField(max_length=1, default='P', choices=FILE_STATUS_CHOICES)
Run Code Online (Sandbox Code Playgroud)

views.py

f = File()
f.status = 'P'
f.save()

old_value = f.status

print f.get_status_display()
> Pending

f.status = 'A'
f.save()

new_value = f.status

print f.get_status_display()
> Approved
Run Code Online (Sandbox Code Playgroud)

如何将旧显示值从"P"变为"待定"?我可以通过在视图中创建表单并访问其值/标签字典来实现.这是最好/唯一的方法吗?

python django views django-models

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

Django:values_list()连接多个字段

我有一个Person模型,我使用django表单编辑另一个带有外键的对象Person.人物模型有first_namelast_name字段.我想运行一个方法来过滤外部引用的下拉框的结果.

我试图用来values_list()覆盖表单字段选项(选择属性),如下所示:

data.form.fields['person'].choices = GetPersons().values_list('id', 'first_name')
Run Code Online (Sandbox Code Playgroud)

GetPersons() 只过滤Person类

return Person.objects.filter(id__gt=1000)`
Run Code Online (Sandbox Code Playgroud)

例如,所以我只会找到我想要出现的人.我如何使用values_list()返回连接first_namelast_name不必返回字典并手动拆分所有内容?

django concatenation

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

Django,Apache Kubernetes引擎上的Apache2,向Stackdriver Trace写了Opencensus Traces

我有一个来自Apache2的Django Web应用程序,其中mod_wsgi位于Google云平台中Kubernetes集群上运行的docker容器中,受Identity-Aware代理保护.一切都很好,但我想为所有请求发送GCP Stackdriver跟踪,而不为我的项目中的每个视图写一个.我发现使用Opencensus处理这个中间件.我浏览了这个文档,并通过指定StackdriverExporter并将project_id参数作为Project Number我的项目的Google Cloud Platform 传递,手动生成导出到项目中的Stackdriver Trace的跟踪.

现在为了对所有请求进行自动化,我按照说明设置了中间件.在settings.py,我添加模块INSTALLED_APPS,MIDDLEWARE并设置了OPENCENSUS_TRACE选项字典.我还加了OPENCENSUS_TRACE_PARAMS.这个伟大的工程使用默认的出口"opencensus.trace.exporters.print_exporter.PrintExporter",我所看到的跟踪和跨度信息,包括跟踪ID,并在我的Apache2 Web服务器日志的所有细节.但是,我想将这些发送到我的Stackdriver Trace处理器进行分析.

我尝试将EXPORTER参数设置为opencensus.trace.exporters.stackdriver_exporter.StackdriverExporter,只要您提供项目编号,该参数在从shell手动运行时有效.

当设置使用时StackdriverExporter,网页不会响应加载,运行状况检查开始失败,最终网页返回502错误,说我应该在30秒内再试一次(我相信身份识别一旦检测到运行状况检查失败,代理就会生成此错误),但服务器不会生成任何错误,并且Apache2中没有访问日志或错误.

在settings.py中有另一个字典命名OPENCENSUS_TRACE_PARAMS,我认为需要确定导出器应该使用哪个项目编号.该示例GCP_EXPORTER_PROJECT设置为None,并SERVICE_NAME设置为'my_service'.

我需要设置哪些选项才能让导出器发送回Stackdriver而不是打印到日志?你对我如何设置它有什么想法吗?

settings.py

MIDDLEWARE = (
    ...
    'opencensus.trace.ext.django.middleware.OpencensusMiddleware',
)
INSTALLED_APPS = (
    ...
    'opencensus.trace.ext.django',
)

OPENCENSUS_TRACE = {
    'SAMPLER': 'opencensus.trace.samplers.probability.ProbabilitySampler',
    'EXPORTER': 'opencensus.trace.exporters.stackdriver_exporter.StackdriverExporter',  # This one just makes the server hang with no response or error …
Run Code Online (Sandbox Code Playgroud)

django mod-wsgi apache2 google-cloud-stackdriver opencensus

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

Django:两个不同的子类指向同一个父类

我有一个模型Person来存储有关人的所有数据。我还有一个Client扩展 Person的模型。我有另一个扩展模型OtherPerson,它也扩展了Person模型。我想创建一个指向 a 的客户端Person,并且还创建一个OtherPerson指向那个的记录Person。基本上,我希望根据当前视图Person将一个对象视为 a Clientand 和 an OtherPerson。这是否可能与 Django 的 ORM 一起使用,或者我是否需要以某种方式编写一个原始查询来创建这个场景。我很确定这在数据库方面是可能的,因为两个子类都将使用其 person_ptr_id 字段指向父 Person 类。

简单地说,如果我创建一个Client(因此Person),我还可以创建一个OtherPerson使用基础对象PersonClient。这样我就可以将它们视为ClientOR 作为OtherPerson,并且保存一个会影响Person每个字段?

“水平”多态性?

这是我的模型的简化版本,以防万一:

class Person(models.Model):
    """
        Any person in the system will have a standard set of details, fingerprint hit details, some clearances and items due, like TB …
Run Code Online (Sandbox Code Playgroud)

django orm

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

Python Django:在视图中,最好是为对象添加属性还是创建数据字典?

在这种情况下,我的模型并不重要,我认为这是一个基本的Python问题.

假设我有一个项目的查询集,我想计算每个要在模板中显示的东西.

在我看来,我可以创建一个对象列表,对于每个对象,我可以在该对象上设置一个属性进行计算,然后我可以在模板中显示它.或者我可以创建一个字典列表,只获取我需要在每个字典中显示的字段以及计算字段.对于性能和一般实践来说哪个更好?

一个过于简化的示例,为了清晰起见(我知道我可以从模板中调用getAge(),我真正计算的是更复杂的,对于性能,我想在视图代码中进行计算):

models.py:

class Person(models.Model):
    first_name = ...
    last_name = ...
    date_of_birth = ...
    .
    .
    .
    def getAge(self):
        return ... # return the calculated years since date_of_birth
Run Code Online (Sandbox Code Playgroud)

views.py:

def method1_object_property(request):
    people = Person.objects.all()
    for p in people:
        p.age = p.getAge()
    return render_to_response('template.htm', {'people': people})

def method2_dictionary(request):
    people = Person.objects.all()
    data = list()
    for p in people:
        row = dict()
        row['first_name'] = p.first_name
        row['last_name'] = p.last_name
        row['age'] = p.getAge()
        data.append(row)
    return render_to_response('template.htm', {'people': data})
Run Code Online (Sandbox Code Playgroud)

template.htm:

<ul>
    {% for …
Run Code Online (Sandbox Code Playgroud)

python django dictionary properties object

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

Django:如何在不删除父类对象的情况下删除子类对象?

我有以下模型(def __unicode__(...)为了清楚起见,我遗漏了):

class Person(models.Model):
    first_name = models.CharField(max_length=64, null=True, blank=True)
    middle_name = models.CharField(max_length=32, null=True, blank=True)
    last_name = models.CharField(max_length=64, null=True, blank=True)

class MinorResident(Person):
    move_in_date = models.DateField(null=True)
    move_out_date = models.DateField(null=True)
    natural_child = models.NullBooleanField()

class OtherPerson(Person):
    associate_all_homes = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

我有以下视图方法使用MinorResident对象来创建OtherPerson对象,如:

def MinorToAdult(request, minor):
    p = Person.objects.get(id=minor.person_ptr_id)
    o = OtherPerson(p.id)
    o.__dict__.update(p.__dict__)
    o.save()
    return True
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我仍然在minoresident表中有一条记录,指向person_ptr_id的人员记录.我在otherperson表中也有一个指针记录,同一个person_ptr_id指向同一个人,并显示切换之前的所有数据,但是使用了OtherPerson对象而不是MinorResident对象.所以,我想删除MinorResident对象,而不删除父类Person对象.我想我可以这样做:

p = Person.objects.get(id=minor.person_ptr_id)
o = OtherPerson()
o.__dict__.update(p.__dict__)
o.save()
minor.delete()
return True
Run Code Online (Sandbox Code Playgroud)

但是如果我能帮助它,我想在Person表中没有新的记录,因为它真的不是一个新人,只是一个现在成年人的人.也许我可以这样做吗?还是有更好的方法来处理模型嬗变?

p = Person.objects.get(id=minor.person_ptr_id)
o = OtherPerson(p.id)
o.__dict__.update(p.__dict__)
o.save()
minor.person_ptr_id = None
minor.delete()
return True
Run Code Online (Sandbox Code Playgroud)

我看了#3711191:django-deletion-object-keeping-parent …

django django-models django-views

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

Django,我可以获得查询集中包含的引用对象

说我有这些模型:

models.py:

class Item(models.Model):
    ref_id = models.PositiveIntegerField()
    name = models.CharacterField(max_length=32)

class ItemDue(models.Model):
    item = models.ForeignKey(Item)
    due_date = models.DateField(null=True, blank=True)
    lots of other fields below
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

我想查询ItemDue对象,但也希望包含Item查询.

如果我得到一组ItemDues,我可以像这样循环:

for item_due in ItemDue.objects.filter(some_criteria):
    print item_due.item.ref_id
Run Code Online (Sandbox Code Playgroud)

但是,当我进行一些性能测试时,这将返回到数据库以获取引用的Item对象,因此我必须为每个执行另一个查询ItemDue来获取Item.ref_id.这在一个巨大的查询中有所不同,所以我想与查询集Item.ref_id一起得到ItemDues.我可以做.values('id', 'item__ref_id')一个ItemDueid和的字典item__ref_id.所以,我可以.values('id', 'item__ref_id', ...)用于所有领域,ItemDue但这将是很多工作.有没有一种简单的方法可以附加到查询集的值来获取该引用对象,而不是ItemDue仅仅添加一个额外的字段来拼写所有字段item__ref_id

谢谢

编辑:

以下是在manage.py shell中运行的一些代码:

def check():
    start = datetime.now() …
Run Code Online (Sandbox Code Playgroud)

python django django-queryset

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

Django Social Auth:Google OAuth2 - 仅显示来自受限域列表的电子邮件

我在网站上有 Django Social Auth(pypi 包social-auth-app-django)与 Google OAuth2 一起使用。

当他们打开页面时,他们会被重定向到 Google 的 OAuth2 身份验证。这非常有效,如果他们尝试使用不在我的限制列表中的电子邮件地址登录,他们会收到 AuthForbidden 异常。我为此添加了一个陷阱,并向他们显示一个不允许他们登录此网站的页面。到目前为止一切都很好。

但是,我希望无效的电子邮件帐户根本不显示在 Google 身份验证页面的列表中。在使用带有参数的 javascript 之前,我已经通过手动调用身份验证页面来完成此操作,但我不确定如何使用罐装 Django 社交身份验证模块来执行此操作。

这可以做到吗?如果可以,怎么做?

我有中间件可以检测用户是否未登录并返回一个 login() 视图,该视图将用户重定向到 Google 身份验证页面。

视图.py

# Login using OAuth2.
@csrf_protect
def login(request):
    next_page = request.path
    if next_page is None or next_page == '':
        next_page = request.POST.get('next', request.GET.get('next', ''))

    # Check if they are already logged in and redirect them to the original page if so.
    if hasattr(request, 'user') and request.user.is_authenticated:
        return HttpResponseRedirect(next_page)

    # Otherwise, send them …
Run Code Online (Sandbox Code Playgroud)

django django-socialauth python-social-auth

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