假设我们有两个对象:
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) 我想创建一个半透明背景的全屏窗口,但是完全可见的子窗口小部件(覆盖效果的种类).
这是我到目前为止所拥有的:
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) 假设我有一个简单的片段,我想在我的网站上重复(有时每页多次):
<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 模板实现此结果的最佳方法是什么?