小编Joe*_*e J的帖子

在Django中获取模型的字段

给定一个Django模型,我试图列出它的所有字段.我已经看到了一些使用_meta模型属性执行此操作的示例,但是meta前面的下划线是否表示_meta属性是私有属性,不应该直接访问?...例如,因为_meta的布局将来可能会改变而不是一个稳定的API?

_meta是这个规则的例外吗?它是否稳定并且可以使用,或者它被认为是不好的做法?或者是否有函数或其他方法来反省模型的字段而不使用_meta属性?下面是一些链接的列表,显示了如何使用_meta属性执行此操作

任何建议都非常感谢.

django对象获取/设置字段

http://www.djangofoo.com/80/get-list-model-fields

如何反省django模型领域?

django introspection django-models metamodel

107
推荐指数
7
解决办法
9万
查看次数

Python Django全局变量

我在Django中寻找简单但推荐的方法,只在内存中存储变量.当Apache重新启动或Django开发服务器重新启动时,该变量将重置为0.更具体地说,我想计算每个模型实例(数据库记录)上发生特定操作的次数,但出于性能原因,我不知道我想将这些计数存储在数据库中.我不在乎服务器重启后计数是否消失.但只要服务器启动,我希望这些计数在Django shell和Web界面之间保持一致,并且我希望能够返回每个模型实例上执行操作的次数.

我不希望变量与用户或会话相关联,因为我可能希望在不登录的情况下返回这些计数(并且我希望无论用户登录什么计数都是一致的).我在描述一个全局变量吗?如果是这样,我如何在Django中使用一个?我注意到像urls.py,settings.py和models.py这样的文件似乎每个服务器启动时只被解析一次(与views.py相比,这似乎是在发出请求的时候解析的).这是否意味着我应该在其中一个文件中声明我的变量?或者我应该以某种方式将它存储在模型属性中(只要它在服务器运行时就会存在)?这可能是一个简单的问题,但我不确定它是如何在Django中完成的.

任何意见或建议都非常感谢.谢谢,乔

python memory django variables global

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

Django:为可重用模型字段创建Mixin

我想在项目中的每个模型中添加一些字段.例如,这些字段是"跟踪字段",例如创建日期,更新日期和"活动"标志.我正在尝试创建一个我可以添加到每个模型类的Mixin,它允许我通过多重继承添加这些额外的字段.但是,在创建对象实例时,看起来我通过Mixin添加的模型字段显示为对象的方法而不是数据库字段.

In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
Run Code Online (Sandbox Code Playgroud)

这是我的模型的样子:

from django.db import models

class Blog(models.Model, TrackingFieldMixin):
    name = models.CharField(max_length=64)
    type = models....


class TrackingFieldsMixin():

    active = models.BooleanField(default=True, 
        help_text=_('Indicates whether or not this object has been deleted.'))
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

所以这似乎不起作用.有谁知道我如何能够为类似于上面的常见模型字段创建可重用的mixin?这种方法有缺陷吗?

谢谢你的帮助,乔

更新:请注意,我计划使用mixin的一些模型使用MPTT模型,因此我不能简单地将我的TrackingFieldMixin混合到基类中并仅从中继承.

class Post(MPTTModel, TrackingFieldMixin):
    post_name = models....
    post_type = models...
Run Code Online (Sandbox Code Playgroud)

django meta inheritance model mixins

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

Django管理员自定义更改列表参数:覆盖/?e = 1

我正在尝试将自定义参数传递给Django Admin更改列表视图,以便我可以以专门的方式过滤列表.我想基于名为'active_pp'的GET参数在2个字段start_date和end_date上过滤查询集.我已经使过滤正常工作,但我无法传入GET查询参数,该参数指定是否应显示过滤结果或正常结果.

我知道,由于安全性,Django Admin会过滤掉任何与指定模型字段无关的传递给它的查询参数.在找到错误的参数后,管理员将用户重定向到当前视图,但用e = 1替换GET查询参数.我想将我的自定义'active_pp'参数列入白名单,这样页面就不会被重定向,我将能够使用该参数.

以下是带有queryset自定义的admin.py中的ModelAdmin示例.

class FeaduredAdmin(admin.ModelAdmin): 

    ....

    def get_changelist(self, request, **kwargs):
        from django.contrib.admin.views.main import ChangeList

        # Try to get the 'active_pp' query parameter
        active_pp = request.GET.get('active_pp',None)

        # Define a custom ChangeList class with a custom queryset
        class ActiveChangeList(ChangeList):
            def get_query_set(self, *args, **kwargs):
                now = datetime.datetime.now()
                qs = super(ActiveChangeList, self).get_query_set(*args, **kwargs)
                return qs.filter((Q(start_date=None) | Q(start_date__lte=now))
                             & (Q(end_date=None) | Q(end_date__gte=now)))

        # use the custom ChangeList class if the parameter exists
        if active_pp:
             return ActiveChangeList

        return ChangeList
Run Code Online (Sandbox Code Playgroud)

有谁知道如何将传递给change_list的自定义GET查询字符串参数列入白名单?

感谢阅读和考虑,乔

更新: …

django arguments admin filter querystringparameter

18
推荐指数
3
解决办法
7093
查看次数

Ansible:仅当组存在时才将Unix组添加到用户

我正在使用Ansible将用户添加到各种服务器.某些服务器定义了不同的UNIX组.我想为Ansible找到一种方法来检查我指定的组是否存在,如果该组存在,则将其添加到用户的辅助组列表中(但如果该组不存在则忽略该语句).

有关如何使用Ansible进行此操作的任何想法?

这是我的出发点.

命令

ansible-playbook -i 'localhost,' -c local ansible_user.yml
Run Code Online (Sandbox Code Playgroud)

ansible_user.yml

---

- hosts: all
  user: root
  become: yes
  vars:
    password: "!"
    user: testa
  tasks:
    - name: add user
      user: name="{{user}}"
            state=present
            password="{{password}}"
            shell=/bin/bash
            append=yes
            comment="test User"
Run Code Online (Sandbox Code Playgroud)

更新:根据@udondan建议的解决方案,我能够使用以下附加任务.

    - name: Check if user exists
      shell: /usr/bin/getent group | awk -F":" '{print $1}'
      register: etc_groups

    - name: Add secondary Groups to user
      user: name="{{user}}" groups="{{item}}" append=yes
      when: '"{{item}}" in etc_groups.stdout_lines'
      with_items: 
          - sudo
          - wheel
Run Code Online (Sandbox Code Playgroud)

unix ansible

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

Helm 可选的嵌套变量

如何在值文件中创建一个可选块,然后在模板中引用它?

例如,假设我有一个如下所示的值文件:

# values.yaml
foo:
   bar: "something"
Run Code Online (Sandbox Code Playgroud)

然后我有一个如下所示的 helm 模板:

{{ .Values.foo.bar }}
Run Code Online (Sandbox Code Playgroud)

如果我想让值文件中的 foo.bar 成为可选怎么办?如果foo键不存在于值中,则会引发错误。

我试过添加为 if 条件。但是,如果foo缺少密钥,这仍然会失败:

{{ if .Values.foo.bar }}
{{ .Values.foo.bar }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)

任何想法都非常感谢。

go-templates kubernetes kubernetes-helm

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

Python setup.py:如何获取 find_packages() 以识别子目录中的包

我正在尝试创建一个 setup.py 文件,其中 find_packages() 递归地查找包。在这个例子中,foo, bar, 和baz都是我想要安装并在 python 路径上可用的模块。例如,我希望能够做到import foo, bar, baz. 该bar-packfoo-pack只是常规的非蟒目录将包含各种支持文件/显示目录(如测试,自述等,具体到相应的模块)。

??? bar-pack
?   ??? bar
?       ??? __init__.py
??? baz
?   ??? __init__.py
??? foo-pack
?   ??? foo
?       ??? __init__.py
??? setup.py

Run Code Online (Sandbox Code Playgroud)

然后说setup.py如下:

from setuptools import setup, find_packages
setup(
    name="mypackage",
    version="0.1",
    packages=find_packages(),
)

Run Code Online (Sandbox Code Playgroud)

但是,当我运行python setup.py installor 时python setup.py sdist,只有baz目录被识别和打包。

我可以进一步简化它,并运行以下命令,但同样,只有baz被识别。

python -c "from setuptools import setup, find_packages; …
Run Code Online (Sandbox Code Playgroud)

python distutils pip setuptools setup.py

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

Django覆盖管理员change_form.html模板 - 在模板中显示关联的模型

我有一种情况,我已经覆盖了给定模型的admin_change.html模板.我创建了一个文件,例如:

/myproject/templates/admin/myapp/mymodel/change_form.html
Run Code Online (Sandbox Code Playgroud)

然后,在覆盖的change_form.html模板中,我正在编辑现有的对象实例,我希望能够访问该模型实例变量,以便我可以显示有关它的更多信息.

{% extends "admin/change_form.html" %}
{% block after_field_sets %}{{ block.super }}
Print my model here: {{ mymodel }}
Print foreignkey related records of my model:  
    {% for item in mymodel.items_set.all %} {{ item }} {% endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道我应该使用什么模板变量来访问这个模型(如果它甚至都被传递).我试过挖掘管理源代码,但很快就迷路了.有谁知道如何从扩展的django模板中访问此模型实例变量?

(注意:在上面的代码中,对{{mymodel}}的引用是不正确的.但重点是我希望能够在我的模板代码中使用类似的变量来引用mymodel实例.)

任何建议都非常感谢.谢谢,乔

django templates admin extend

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

Django:同一个项目中的sorl-thumbnail和easy-thumbnail

我正在开发和使用两个独立的模块化Django应用程序的项目.但是,一个应用程序需要简单的缩略图,另一个需要索引缩略图.不幸的是,这两个缩略图库使用了模板标记语法{%load thumbnail%},因此当使用它们的模板尝试渲染时,它们会发生冲突和中断.

有没有办法解决这种类型的冲突?(例如,模板选项会影响{%load thumbnail as easy_thumbnail%}).我是否必须分叉其中一个应用程序并将其中一个缩略图库替换为另一个?如果是这样,我应该选择哪个?

谢谢你考虑我的问题,乔

django templates image thumbnails sorl-thumbnail

12
推荐指数
3
解决办法
2775
查看次数

Django Haystack:根据列表中的多个项目过滤查询.

我有可以属于一个或多个组织模型实例的事件模型实例.我已经实现了haystack 2.0.0来索引我的所有事件.这是一个示例搜索索引.

class EventIndex(indexes.SearchIndex, indexes.Indexable):

    text = indexes.CharField(document=True, use_template=True)
    organization_slug = indexes.CharField(model_attr='organization__slug',
                        weight=5.0)
    organization_name = indexes.CharField(model_attr='organization__name', 
                        weight=5.0)
    name = indexes.CharField(model_attr='name', weight=10.0)

    ....    

    def get_model(self):
        return Event

    def index_queryset(self):
        return Event.objects.filter()
Run Code Online (Sandbox Code Playgroud)

我的问题是如何构建一个基于一个或多个组织过滤事件的SearchQuerySet查询. 例如,我想查找属于"orgnization1"和"organization3"的所有事件(其中组织列表可以是任意长度)

作为Django查询,它可能看起来像这样:

Event.objects.filter(organization__in=[orgnization1, organization3]).filter(...)
Run Code Online (Sandbox Code Playgroud)

如何将其转换为haystack查询?这是我的尝试,但我真的不知道我在做什么......

organization_list = [organization1.slug, organization2.slug]
SearchQuerySet().filter_or(organization__contains=organization_list)
Run Code Online (Sandbox Code Playgroud)

以下是我的模型外观的示例:

class Event(models.Model):
    name = models.CharField(max_length=64) 
    organization = models.ForeignKey('mymodule.Organization')
    ...

class Organization(models.Model):
    slug = models.SlugField(max_length=64)
    name = models.CharField(max_length=64)
    ... 
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.

django search django-queryset relation django-haystack

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