我想添加一个可以从模板调用的自定义管理器,但不会影响整个模型(例如管理员视图),并且会监听请求中的参数集(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-guardian的行级权限添加到我的项目中.
从设置看起来一切正常:
但是,分配(分配不分配)权限对管理界面完全没有影响.允许每个用户对所有对象执行所有操作.
我试过了
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 应用程序。对于许多用例,我需要构建类似但略有不同的模板(包括 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') …
我尝试使用 inline_models 创建 Flask-Admin 视图。
这有效,但它逐项呈现内联项。
class MyViewFeatureEngineering(sqla.ModelView):
inline_models = ((Feature_columns),)
Run Code Online (Sandbox Code Playgroud)
但我想将其显示为列表。
它可以是可编辑的,也可以是只读的,为几列设置了 column_editable_list。
这是否可以通过 Flask-Admin 实现,或者现在是切换到完全自定义模板的时候了吗?到目前为止,似乎几乎所有东西都可以根据自己的需要进行覆盖。
谢谢
将ngResource用于复杂数据模型的正确方法是什么?那里有无数的单表示例,但很少或没有涵盖1:n和m:n关系.
假设一个简单的'父'1->''子'关系,并且入口点始终是通过父:是否有必要为父和子创建$资源,并在每次新的时候为子项调用save()通过parent_id创建相关的子节点?或者我的思维方式还没有到达Angular世界,我应该尝试保存()父母只有ngResource负责其余的事情?