我对Django很熟悉,但最近注意到on_delete=models.CASCADE模型中存在一个选项,我搜索了相同的文档,但找不到更多:
在Django 1.9中更改:
on_delete现在可以用作第二个位置参数(以前它通常只作为关键字参数传递).它将是Django 2.0中的必需参数.
from django.db import models
class Car(models.Model):
manufacturer = models.ForeignKey(
'Manufacturer',
on_delete=models.CASCADE,
)
# ...
class Manufacturer(models.Model):
# ...
pass
Run Code Online (Sandbox Code Playgroud)
on_delete做什么?(我想如果删除模型需要完成的操作)
怎么models.CASCADE办?(文档中的任何提示)
还有哪些其他选择(如果我的猜测是正确的)?
这个文档在哪里?
我最近尝试在OpenShift上导出一个Django项目,但是没有成功.我发现的唯一解决方案是"预构建"(例如https://github.com/openshift/django-example).
我花了几个小时试图使它适应我的项目,但我总是遇到内部服务器错误.
那么,如何在openshift上设置django?
我有一个unicode对象列表,并希望将它们编码为utf-8,但编码似乎不起作用.
代码在这里:
>>> tmp = [u' test context']
>>> tmp.encode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'encode'
>>>
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么没有属性编码
在我的Django 2.0站点中,我想lang将html标记的属性设置为当前语言环境的语言.在我base.html扩展的其他模板中,我使用get_current_language以下方式
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
...
</html>
Run Code Online (Sandbox Code Playgroud)
该网站提供多种语言的翻译.如果我在浏览器中切换语言,我会看到正确的翻译,但该lang属性将始终包含en.
在我的settings.py我
USE_I18N = True
LANGUAGE_CODE = 'en-us'
Run Code Online (Sandbox Code Playgroud)
并根据Goran的建议提供以下中间件订单
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
Run Code Online (Sandbox Code Playgroud)
该LANGUAGES设置未设置.
正如Kostadin Slavov所建议的那样,我尝试从视图中打印语言.似乎get_current_language调用了django.utils.translation.get_language,所以我在我的视图中插入了以下内容
from django.utils import translation
print(translation.get_language())
Run Code Online (Sandbox Code Playgroud)
它打印正确的值(例如de,在浏览器设置为德语的情况下访问视图时).
我还缺少什么?
我设置了django-filter来过滤我的一些列表.以下是其中一个,具有自定义形式:
class BookingListFiltersForm(forms.Form):
state__in = forms.MultipleChoiceField(
choices=Booking.STATE_CHOICES, required=False,
label=_("État"), widget=forms.CheckboxSelectMultiple)
source__in = forms.ModelMultipleChoiceField(
queryset=Platform.objects.all(), required=False,
label=_("Source"), widget=ModelSelect2Multiple(
url='autocomplete:platform'))
class BookingManagerFilter(filters.FilterSet):
payments__date = filters.DateFilter(method='payments__date_filter')
payments__method = filters.ChoiceFilter(
method='payments__method_filter',
choices=BookingPayment.METHOD_CHOICES,
)
class Meta:
model = Booking
fields = {
'period': [
'endswith', 'endswith__gte', 'endswith__lte',
'startswith', 'startswith__gte', 'startswith__lte',
],
'state': ['in'],
'source': ['in'],
'booking_date': ['date', 'date__lte', 'date__gte'],
'accommodation': ['in'],
'guest': ['exact']
}
def get_form_class(self):
return BookingListFiltersForm
def payments__date_filter(self, queryset, name, value):
return queryset.filter(**{name: value})
def payments__method_filter(self, queryset, name, value):
return queryset.filter(**{name: …Run Code Online (Sandbox Code Playgroud) 我为我的一个模型添加了一个新字段:
class Agency(models.Model):
email = models.EmailField(unique=True, verbose_name=_("e-mail"))
Run Code Online (Sandbox Code Playgroud)
由于此字段不能为空,django-admin makemigrations请求我提供一次性默认,我这样做.这是生成的迁移:
# Generated by Django 1.9.4 on 2016-03-20 10:38
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0008_auto_20160226_1226'),
]
operations = [
migrations.AddField(
model_name='agency',
name='email',
field=models.EmailField(default='example@example.fr', max_length=254, unique=True, verbose_name='e-mail'),
preserve_default=False,
),
]
Run Code Online (Sandbox Code Playgroud)
正如所料,django-admin migrate抛出一个错误:
psycopg2.IntegrityError: could not create unique index "accounts_agency_email_key"
DETAIL: Key (email)=(example@example.fr) is duplicate.
Run Code Online (Sandbox Code Playgroud)
我想我可以在使字段唯一之前编辑迁移以设置唯一值.所以我尝试过:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-03-20 10:38
from …Run Code Online (Sandbox Code Playgroud) 我想要做的事情非常简单,但我无法找到如何给一个字段赋予另一个字段的价值.
我只想用另一个字符计数更新一个字段.
db.collection.update({$exists:true},{$set : {field1 : field2.length}})
Run Code Online (Sandbox Code Playgroud)
我试过给它点符号
db.collection.update({$exits:true},{$set : {field1: "this.field2.length"}})
Run Code Online (Sandbox Code Playgroud)
以及使用javascript语法
db.collection.update({$exits:true},
{$set : {field1: {$where : "this.field2.length"}})
Run Code Online (Sandbox Code Playgroud)
但只是复制了字符串并分别获得了"notOkforstorage".有帮助吗?
更新:当我按ID查询时,我只获得"notOkforStorage":
db.collection.update({_id:ObjectID("38289842bbb")},
{$set : {field1: {$where :"this.field2.length"}}})
Run Code Online (Sandbox Code Playgroud) 我正在尝试从JPEG照片(1600x900)和带有Alpha通道(400x62)的PNG徽标制作合成图像.
这是一个使用image magick完成工作的命令:
composite -geometry +25+25 watermark.png original_photo.jpg watermarked_photo.jpg
Run Code Online (Sandbox Code Playgroud)
现在我想在python脚本中做类似的事情,而不用PIL在外部调用这个shell命令.
这是我尝试过的:
photo = Image.open('original_photo.jpg')
watermark = Image.open('watermark.png')
photo.paste(watermark, (25, 25))
Run Code Online (Sandbox Code Playgroud)
这里的问题是完全忽略了alpha通道,结果好像我的水印是黑白而不是rbga(0, 0, 0, 0)和rbga(255, 255, 255, 128).
事实上,PIL文档指出:"如果你想将图像与他们的alpha通道相结合,请参阅alpha_composite()."
所以我看了看alpha_composite().不幸的是,这个功能要求两个图像具有相同的大小和模式.
我正在使用Django管理员,我希望能够使用模型的现有实例作为制作新对象的模板,因此使用django admin的人不需要重新键入所有相同的属性在制作新物体时,在物体上.
我在Django管理表单底部想象它有点像这样更新单个对象:
django文档通过添加模型上的操作来解释如何添加批量操作,如下所示:
class ArticleAdmin(admin.ModelAdmin):
actions = ['make_published']
def make_published(self, request, queryset):
queryset.update(status='p')
make_published.short_description = "Mark selected stories as published"
Run Code Online (Sandbox Code Playgroud)
但是,对于我来说,如何change model对一个对象上的单个表单执行此操作并不是很清楚,因为我只想一次应用于模型.
我该怎么做?
我猜我可能需要使用change_model形式,但除此之外,我不太确定.
有没有一种快速的方法来做到这一点而不覆盖大量的模板?
我有一个 jsonfield
foo = JSONField(default=list)
Run Code Online (Sandbox Code Playgroud)
我想过滤查询集,以便 foo 有一些数据(不是空列表)
我试过了
MyModel.objects.filter(foo__ne=[]) # doesn't seem to work
MyModel.objects.filter(foo__gt=[]) # seems to work but can't be sure if it's the right approach
Run Code Online (Sandbox Code Playgroud) django ×7
python ×6
django-admin ×1
encoding ×1
localization ×1
mongodb ×1
openshift ×1
pillow ×1
postgresql ×1
redhat ×1