我有一个带有两个字段的模型,这些字段是其他模型的外键.
class Homepage(models.Model):
featured_user = models.ForeignKey('auth.user')
featured_story = models.ForeignKey('site_stories.story')
@staticmethod
def autocomplete_search_fields():
return ("featured_user__icontains", "featured_story__icontains",) # Is this right?
class HomepageAdmin(admin.ModelAdmin):
raw_id_fields = ('featured_user', 'featured_story',)
autocomplete_lookup_fields = {
'fk': ['featured_user'],
'fk': ['featured_story'] # <====== What should this be???
}
admin.site.register(Homepage, HomepageAdmin)
Run Code Online (Sandbox Code Playgroud)
在阅读了管理员文档并尝试了一些事情之后,很明显您确实需要使用标签"fk"来为grappelli将自动完成查找格式应用于字段.那么......我怎么能用这个有多个外键字段的模型呢?
这里需要新手.试图转换一些JQuery代码我以旧的方式工作与RequireJS工作.
我的页面的标题通过脚本标记加载三个JS文件 - require.js本身,我的require.cfg.js,以及具有特定于站点的功能的boot/main.js.
相关的require.cfg.js摘录:
,paths: {
'boot': 'src/boot'
,'jquery': 'lib/jquery.min'
,'jquery.masonry': 'lib/plugins/masonry.pkgd.min'
,'jquery.imagesloaded': 'lib/plugins/imagesloaded.pkgd.min'
}
,shim: {
'jquery': {
exports: 'jQuery'
}
,'jquery.masonry': ['jquery']
,'jquery.imagesloaded': ['jquery']
}
Run Code Online (Sandbox Code Playgroud)
开机/ main.js:
require([
'jquery',
'jquery.masonry',
'jquery.imagesloaded',
], function($) {
// The following code worked just fine when I included it in the header of the page as-is
$(function() {
var $container = $('#container');
// This doesn't work
$container.imagesLoaded(function() {
// Neither does this
$('#container').masonry({itemSelector : '.item',});
});
});
});
Run Code Online (Sandbox Code Playgroud)
我可以确认浏览器正在找到并加载所有这些JS文件.我确认如果我这样做:
require([
'jquery', …Run Code Online (Sandbox Code Playgroud) 我被 Django 1.5.6 应用程序中的缓存问题难住了:
@vary_on_cookie
@cache_page(24 * 60 * 60, key_prefix=':1:community')
@rendered_with("general/community.html")
@allow_http("GET")
def community(request):
...
return { ... }
Run Code Online (Sandbox Code Playgroud)
在本地,缓存工作正常,但是当我在暂存中测试它时,@vary_on_cookie 不起作用——我可以通过执行的查询看到,community()正在对此页面的后续调用中执行。
我更新了本地环境中的设置,使用与暂存相同的 Redis 缓存来消除这种差异,但本地环境继续正常运行。
查看 Redis 缓存中的键,我可以看出问题所在——在每次调用此页面时,新的键都会添加到缓存中。比较以下输出cache.keys('*community*'):
当地的:
第一次调用社区页面:
[u'community:1:views.decorators.cache.cache_page.:1:community.GET.b528759dd79cf1c6b405290c0bc05e39.3b7d4c38ec8d92512a4a0847f4738298.en-us.America/New_York',
u'community:1:views.decorators.cache.cache_header.:1:community.b528759dd79cf1c6b405290c0bc05e39.en-us.America/New_York']
Run Code Online (Sandbox Code Playgroud)
第二次调用(同一用户):
[u'community:1:views.decorators.cache.cache_page.:1:community.GET.b528759dd79cf1c6b405290c0bc05e39.3b7d4c38ec8d92512a4a0847f4738298.en-us.America/New_York',
u'community:1:views.decorators.cache.cache_header.:1:community.b528759dd79cf1c6b405290c0bc05e39.en-us.America/New_York']
Run Code Online (Sandbox Code Playgroud)
请注意,两种情况下的键数量相同。
分期:
第一次调用社区页面:
[u'community:1:views.decorators.cache.cache_header.:1:community.b528759dd79cf1c6b405290c0bc05e39.en-us.America/New_York',
u'community:1:views.decorators.cache.cache_page.:1:community.GET.b528759dd79cf1c6b405290c0bc05e39.559380b85dc0cdcf0ff25051df78987d.en-us.America/New_York']
Run Code Online (Sandbox Code Playgroud)
第二次调用(同一用户):
[u'community:1:views.decorators.cache.cache_header.:1:community.b528759dd79cf1c6b405290c0bc05e39.en-us.America/New_York',
u'community:1:views.decorators.cache.cache_page.:1:community.GET.b528759dd79cf1c6b405290c0bc05e39.559380b85dc0cdcf0ff25051df78987d.en-us.America/New_York',
u'community:1:views.decorators.cache.cache_page.:1:community.GET.b528759dd79cf1c6b405290c0bc05e39.6ec85abcc8a14d66800228bdccc537f0.en-us.America/New_York']
Run Code Online (Sandbox Code Playgroud)
请注意,尽管是同一用户,但已将附加条目添加到缓存中!
我不知道从这里该去哪里。两种环境都使用SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'. 登台环境清楚地识别出这在其他方面都是同一个用户。@vary_on_cookie 中发生了什么,在暂存过程中产生了差异,但在本地却没有产生差异?
我已经检查了我所有的分期与本地差异,仔细检查了我的自定义中间件,但我不知道该看什么。任何想法,甚至下一步要看什么,都将不胜感激。谢谢!
更新
我检查了django.utils.cache._generate_cache_key()它如何生成缓存键的最后一个十六进制部分。我天真地认为它只是查看 Django 自己的 cookie(如 sessionid),但我发现它使用了传递到的所有cookie——HTTP_COOKIE这意味着 Django 和非 Django。对我来说,这意味着来自 Google Analytics 和 New Relic 的 cookie,我都没有在本地运行它们。
for …Run Code Online (Sandbox Code Playgroud) 我正在编写一个 Python 脚本,有时需要用户输入输入。我在 macOS Sierra 上使用 bash。
为了接收输入,我写了以下内容:
import readline # gnureadline 6.3.8
START = '\033[91m\033[1m'
END = '\033[0m'
response = raw_input(START + 'Enter text: ' + END)
Run Code Online (Sandbox Code Playgroud)
START我在和中使用 ANSI 转义序列END来直观地区分脚本的提示符和用户的文本输入。
不幸的是,一旦我开始输入文本,程序就会丢失用户输入文本的实际开头位置。下面的第一克拉是CTRLA现在映射到的位置,第二克拉是CTRLE我要去的地方。箭头键同样认为用户输入的开始和结束是偏移的,如图所示。
Enter text: hello my name is
^ ^
Run Code Online (Sandbox Code Playgroud)
我尝试了一些方法来调试这个。
我尝试在提示和文本输入之间添加换行符,但这只会使偏移量变得更糟。
如果我只使用箭头键而不使用诸如CTRLA、CTRLE、 选项箭头之类的东西来浏览字符串,那么这将按预期工作。也就是说,考虑到用户输入的字符串的长度和复杂性,仅使用箭头键在字符串中移动对于用户来说将是痛苦的。
最重要的是,如果我根本不使用STARTand ,这会完美地工作。END也就是说,脚本的可用性下降了——很难从完整版本的脚本中的所有其他文本中找出提示。
是否有一些技巧可以让我能够使用 ANSI 转义序列来格式化提示,而不会影响用户使用CTRLA、CTRLE和选项箭头进行导航的能力?
在我的项目中的JQuery模板中,我试图写出一个不对HTML进行编码的HTML字符串变量.当我像这样输出变量时:
${description}
Run Code Online (Sandbox Code Playgroud)
它导致原始HTML字符串输出标签,所有这些都是这样的:
<p>text <b>bold</b> <i>italic</i></p>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将标记转换为代码中相同位置的真实标记时:
{{html $description}}
Run Code Online (Sandbox Code Playgroud)
不输出任何东西!
我尝试了很多传递变量的方法,但我认为html例程中有一些事情我没有得到.
谢谢.
更新:
以下是它的调用方式:
this.$el.attr('data-id', tmplData.id).
data('id', tmplData.id).html($.tmpl(this.template, tmplData));
Run Code Online (Sandbox Code Playgroud)
this.template是模板文件,tmplData是JSON,包括$ description和其他所需的变量.
另一个更新:
{{html '<p>string</p>'}}
Run Code Online (Sandbox Code Playgroud)
表现得像预期的那样.但
{{html $another_variable}}
Run Code Online (Sandbox Code Playgroud)
即使$ another_variable中没有HTML,也无法生成任何输出.
另一个更新:
我也尝试过:
${$item.html(description)}
Run Code Online (Sandbox Code Playgroud)
并将对模板的调用更改为
this.$el.attr('data-id', tmplData.id).
data('id', tmplData.id).
html($.tmpl(this.template, tmplData, {
truncate: _.truncateStrip,
html: _.html,
}));
Run Code Online (Sandbox Code Playgroud)
并编写了一个自定义的html例程来按照建议不变地传递字符串:
html: function(str) {
return str;
}
Run Code Online (Sandbox Code Playgroud)
但仍然没有骰子.
我正在编写一个脚本来自动打印 Chrome 中的一组网页。如果我要手动打印它们,我会从“比例”下拉列表中选择“自定义”,然后在下面的输入字段中输入 50。
当我使用 Selenium 和 ChromeDriver 自动批量打印这些页面时,我无法弄清楚要传入哪些参数来复制此设置。
appState = { "recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
"printing.scaling": 'Custom', # <== Does it go here?
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
"printing.scaling": 'Custom', # <== Or here?
}
profile = { 'printing.print_preview_sticky_settings.appState': json.dumps(appState),
'printing.print_header_footer': False,
# So many different versions of things I have tried :-(
'printing.scaling': 'Custom',
'printing.scaling_type': 'Custom',
'print_preview.scaling': 'Custom',
'print_preview.scaling_type': 'Custom',
'printing.custom_scaling': True,
'printing.fit_to_page_scaling': 50,
'printing.page_scaling': True,
}
chrome_options = webdriver.ChromeOptions() …Run Code Online (Sandbox Code Playgroud) 这里是 Django 新手。根据文档,我尝试执行以下操作从我正在构建的公共网站的主页获取管理网站的链接:
{% load admin_urls %}
<p>Go to the <a href="{% url opts|admin_urlname:'add' %}">admin</a>.</p>
Run Code Online (Sandbox Code Playgroud)
我收到错误:
NoReverseMatch at /
u'opts|admin_urlname' is not a registered namespace
Run Code Online (Sandbox Code Playgroud)
我正确地包含了 URL:
url(r'^admin/', include(admin.site.urls)),
Run Code Online (Sandbox Code Playgroud)
我的模板加载器的顺序正确。
我对此尝试了几种不同的变体,它们都会引发命名空间错误。
有任何想法吗?谢谢!
我有许多与模型具有ForeignKey关系的Person模型.例如:
class PersonData(BaseModel):
person = models.ForeignKey(Person)
data = models.TextField()
Run Code Online (Sandbox Code Playgroud)
我想锁定管理员,这样一旦PersonData创建了一个对象,管理员用户就可以更改数据,但无法更改Person.
起初它看起来很简单 - 我把它放在PersonDataAdmin课堂上:
def get_readonly_fields(self, request, obj=None):
if obj:
return self.readonly_fields + ('person',)
return self.readonly_fields
Run Code Online (Sandbox Code Playgroud)
在显示方面,这是按预期工作 - 我看到的值person,但它是灰色的所以我无法改变它 - 但是当我尝试更改数据并提交表单时,我收到一条错误消息, "请更正以下错误." 没有其他消息出现,但通过一些挖掘,我发现表单缺少必填person字段的值.
我已经研究了一个解决方案,它将涉及创建一个自定义表单,可以选择性地禁用这个字段(类似这个或这个),但是(a)我没有成功地使它工作,并且(b)它似乎是一个对于看起来更简单的情况的大量代码.我也考虑过使用exclude,但遇到了同样的问题read_only.
有关如何实现这一目标的任何想法?谢谢!
我正在尝试编写一个简单的测试用例来测试允许将Orange对象分配给Apple对象的 Django 表单。
表格.py
class AppleOrangeAssignmentForm(forms.ModelForm):
orange = forms.ModelChoiceField(required=True, \
queryset=Orange.objects.filter(apple=None))
class Meta:
model = Apple
fields = ('orange')
Run Code Online (Sandbox Code Playgroud)
onqueryset是orange为了确保下拉列表中的值只是Orange尚未分配给其他的Apple值。该代码在调用它的视图中正确且一致地工作。
在下面的测试用例中,我创建了一个全新的,Orange以确保我有一个它没有被分配到其他地方。
测试.py
def test_apple_orange_assignment(self):
apple = Apple.objects.get(pk=1)
self.assertEquals(apple.orange, None)
orange = Orange.objects.create(name='clementime')
form_data = { 'orange': orange }
form = AppleOrangeAssignmentForm(data=form_data, instance=apple)
self.assertTrue(form.is_valid()) # <=== Fails here
Run Code Online (Sandbox Code Playgroud)
奇怪的是,该表单在测试用例中没有验证! form.errors说:{'orange': ['Select a valid choice. That choice is not one of the available choices.']}。当我进一步挖掘时,我可以看到orange …
django ×4
django-admin ×2
jquery ×2
python ×2
ansi-escape ×1
bash ×1
caching ×1
chromium ×1
django-urls ×1
modelform ×1
printing ×1
requirejs ×1
selenium ×1