小编sze*_*eta的帖子

带过滤器参数的django自定义管理器

我想添加一个可以从模板调用的自定义管理器,但不会影响整个模型(例如管理员视图),并且会监听请求中的参数集(user_profile).

以下是我到目前为止的情况:

models.py:

class CurrentQuerySet(models.query.QuerySet):
    def current(self):
            return self.filter(id=1) ## this simplified filter test works..
class CurrentManager(models.Manager):
    use_for_related_fields = True
    def get_query_set(self):
            return CurrentQuerySet(self.model)
    def current(self, *args, **kwargs):
            return self.get_query_set().current(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

对于模型B定义:

    objects = CurrentManager()
Run Code Online (Sandbox Code Playgroud)

模板调用:

{% for b in a.b_set.current %}
Run Code Online (Sandbox Code Playgroud)

但是一旦我尝试将参数传递给该过滤器(在这种情况下是存储在用户配置文件中的日期),该方法就不会返回任何结果.

例如:

models.py

class CurrentQuerySet(models.query.QuerySet):
    def current(self,my_date): 
            return self.filter(valid_from__lte=my_date) 
Run Code Online (Sandbox Code Playgroud)

showA.html

{% for b in a.b_set.current(request.user.get_profile.my_date) %}
Run Code Online (Sandbox Code Playgroud)

我没有从模板中传递参数,而是尝试在view.py中设置它

@login_required
def showA(request,a_id):
    my_date = request.user.get_profile().my_date
    a = A.objects.get(id=a_id)
    t = loader.get_template('myapp/showA.html')
    c = RequestContext(request,{'a':a,'my_date':my_date,})
    return HttpResponse(t.render(c))
Run Code Online (Sandbox Code Playgroud)

我在这里错过(或误解)哪一部分?

谢谢

[R

编辑 …

django django-models django-views django-managers

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

使用django-guardian的行级权限 - 对观察到的管理界面没有影响

我已将django-guardian的行级权限添加到我的项目中.

从设置看起来一切正常:

  • 已创建Guardian特定表(guardian_groupobjectpermission,guardian_userobjectpermission)
  • 带有GuardedModelAdmin的模型显示"历史记录"旁边的"对象权限"功能
  • 它允许我为用户/组分配"添加","更改","删除"权限

但是,分配(分配不分配)权限对管理界面完全没有影响.允许每个用户对所有对象执行所有操作.

我试过了

user_can_access_owned_objects_only = True
Run Code Online (Sandbox Code Playgroud)

但这只会影响查看对象的能力.一旦用户看到它,他也可以更改并删除它.无论权限中设置了什么.

我跟随另一个在ModelAdmin中提出这个问题的讨论

def queryset(self, request):
    if request.user.is_superuser:
        return get_objects_for_user(user=request.user, perms=['change_program'], klass=Program) 
Run Code Online (Sandbox Code Playgroud)

但是这具有与上面类似的效果,它仅限制可见项目.

我希望看到管理员"保存"和"删除"按钮(和功能)听django-guardian.这是误会吗?或者我不是走在整条路上了吗?

谢谢你的提示![R

django django-guardian

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

即时/动态创建模板

我目前正在围绕一个相当复杂的数据模型编写一个 Django 应用程序。对于许多用例,我需要构建类似但略有不同的模板(包括 graphviz 等)。

现在我想知道是否有一种方法可以遵循 DRY 并“动态”创建模板,例如基于嵌套元组(其中每个用例 -> 模板都定义一个元组)。

实际上,我想停止写这些:

static_template_case1.html

{% if program %}
    {{ program.name }}
    {% for process in program.process_set.all %}
        {{ process.name }}
        {% for step in process.step_set.all %}
            {{ step.name }}
        {% endfor %}
        {% for control in process.control_set.all %}
            {{ control.name }}
        {% endfor %}
    {% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

并将其替换为以下方向的内容:

模板生成器.py

structure_case1 = ("program"("process"("step","control")))

def onTheFlyTemplate(structure):
    # iterate through structure
    # build template dynamically
    # return template

onTheFlyTemplate(structure_case1)
Run Code Online (Sandbox Code Playgroud)

我找不到类似的东西,也不知道从哪里开始动态生成模板,也不知道如何集成它。

在视图中感觉像是一个很好的起点(而不是loader.get_template('static_template_case1.html') …

python django dry django-templates

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

Flask 管理员将 inline_models 显示为列表

我尝试使用 inline_models 创建 Flask-Admin 视图。

这有效,但它逐项呈现内联项。

class MyViewFeatureEngineering(sqla.ModelView):
    inline_models = ((Feature_columns),)
Run Code Online (Sandbox Code Playgroud)

但我想将其显示为列表。

它可以是可编辑的,也可以是只读的,为几列设置了 column_editable_list。

这是否可以通过 Flask-Admin 实现,或者现在是切换到完全自定义模板的时候了吗?到目前为止,似乎几乎所有东西都可以根据自己的需要进行覆盖。

谢谢

python flask flask-sqlalchemy flask-admin

5
推荐指数
0
解决办法
283
查看次数

angularjs $ resource和one-to-many关系

将ngResource用于复杂数据模型的正确方法是什么?那里有无数的单表示例,但很少或没有涵盖1:n和m:n关系.

假设一个简单的'父'1->''子'关系,并且入口点始终是通过父:是否有必要为父和子创建$资源,并在每次新的时候为子项调用save()通过parent_id创建相关的子节点?或者我的思维方式还没有到达Angular世界,我应该尝试保存()父母只有ngResource负责其余的事情?

angularjs ngresource

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