小编Enu*_*nuy的帖子

如何在django admin.SimpleListFilter中访问已过滤的查询集

假设我们有两个对象:

class Author(models.Model):
    name = models.CharField(length=50)

class Book(models.Model):
    author = models.ForeignKey(Author)
    is_bestseller = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

在BookAdmin中,如果我们指定

list_filter = ('author', 'is_bestseller')
Run Code Online (Sandbox Code Playgroud)

"作者"给你的选择将永远是数据库中的所有作者,无论他们是否写过畅销书.

我希望我的过滤器的选择受到当前选择的限制.我尝试使用admin.SimpleListFilter以一般方式执行此操作,但是,我被卡住了,因为:

model_admin.get_queryset()
Run Code Online (Sandbox Code Playgroud)

返回未过滤的查询集(即所有对象,而不仅仅是当前由用户过滤掉的对象).

如何获取BookAdmin 的筛选查询集?

编辑:为了更好地说明问题,这是我的代码:

class ForeignFieldFilter(admin.SimpleListFilter):
    field = None

    def lookups(self, request, model_admin):
        queryset = model_admin.get_queryset(request).select_related(self.field)
        # ^^^ !!! Returns UNFILTERED queryset - it's not affected by other filters

        field_ids = queryset.values_list(self.field, flat=True)

        for field_value in self.model..objects.filter(id__in=field_ids):
            yield (field_value.pk, str(field_value))

    def queryset(self, request, queryset):
        value = self.value()

        # Check that any value was passed, if not, …
Run Code Online (Sandbox Code Playgroud)

django django-admin

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

PyQt5:使用不透明的子项创建半透明窗口

我想创建一个半透明背景的全屏窗口,但是完全可见的子窗口小部件(覆盖效果的种类).

这是我到目前为止所拥有的:

import sys

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

app = QApplication(sys.argv)

# Create the main window
window = QMainWindow()

window.setWindowOpacity(0.3)
window.setAttribute(Qt.WA_NoSystemBackground, True)
window.setWindowFlags(Qt.FramelessWindowHint)

# Create the button
pushButton = QPushButton(window)
pushButton.setGeometry(QRect(240, 190, 90, 31))
pushButton.setText("Finished")
pushButton.clicked.connect(app.quit)

# Center the button
qr = pushButton.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
pushButton.move(qr.topLeft())

# Run the application
window.showFullScreen()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

这会产生半透明效果,但即使按钮也是半透明的.

我也试过替换了

window.setWindowOpacity(0.3)
Run Code Online (Sandbox Code Playgroud)

通过这个电话

window.setAttribute(Qt.WA_TranslucentBackground, True)
Run Code Online (Sandbox Code Playgroud)

但无济于事,在这种情况下,背景是完全透明的(按钮正确完全可见).

解决方案:(感谢Aaron的建议):

诀窍在于为主窗口实现自定义paintEvent.

import sys

from PyQt5.QtCore import * …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt qt5 pyqt5

8
推荐指数
2
解决办法
4787
查看次数

在模板中多次包含动态片段

假设我有一个简单的片段,我想在我的网站上重复(有时每页多次):

<div class="snippet-css">
  <h1>{% block snippet-header %}{% endblock %}</h1>

  <div class="snippet-content">
  {% block snippet-content %}
  {% endblock %}
  </div>

  <div class="snippet-footer">
  {% block snippet-footer%}{% endblock %}
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想在同一页面中多次包含此代码段,每次都用唯一的内容替换代码段标题、代码段内容和代码段页脚块。

定义一个接受这三个块作为参数的 django 标签对我来说不太好(HTML 代码锁定在 Django 标签内):

{% generate_snippet heading content footer %}
Run Code Online (Sandbox Code Playgroud)

我也找到了这篇博文

http://powertwenty.com/blog/index.php/python/repeating_sections_in_a_django_template

它通过将代码片段分成几个标签来解决问题。

使用 Django 模板实现此结果的最佳方法是什么?

django django-templates

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

标签 统计

django ×2

django-admin ×1

django-templates ×1

pyqt ×1

pyqt5 ×1

python ×1

qt ×1

qt5 ×1