小编Ant*_*ard的帖子

on_delete在Django模型上做了什么?

我对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办?(文档中的任何提示)

还有哪些其他选择(如果我的猜测是正确的)?

这个文档在哪里?

python django django-models

261
推荐指数
7
解决办法
14万
查看次数

如何在OpenShift上配置Django?

我最近尝试在OpenShift上导出一个Django项目,但是没有成功.我发现的唯一解决方案是"预构建"(例如https://github.com/openshift/django-example).

我花了几个小时试图使它适应我的项目,但我总是遇到内部服务器错误.

那么,如何在openshift上设置django?

python django redhat openshift

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

AttributeError:'list'对象没有属性'encode'

我有一个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)

我无法理解为什么没有属性编码

python encoding

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

Django的get_current_language总是返回"en"

在我的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 localization django-templates internationalization

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

django-filter用空场乱搞

我设置了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)

python django django-filter

10
推荐指数
2
解决办法
1127
查看次数

如何在添加新的唯一字段时正确进行迁移

我为我的一个模型添加了一个新字段:

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)

django django-migrations

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

MongoDB更新.试图从另一个属性设置一个字段

我想要做的事情非常简单,但我无法找到如何给一个字段赋予另一个字段的价值.

我只想用另一个字符计数更新一个字段.

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)

mongodb

7
推荐指数
2
解决办法
1万
查看次数

PIL:PNG图像作为JPG图像的水印

我正在尝试从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().不幸的是,这个功能要求两个图像具有相同的大小和模式.

python python-imaging-library pillow

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

如何在Django Admin中将自定义操作添加到更改模型表单?

我正在使用Django管理员,我希望能够使用模型的现有实例作为制作新对象的模板,因此使用django admin的人不需要重新键入所有相同的属性在制作新物体时,在物体上.

我在Django管理表单底部想象它有点像这样更新单个对象:

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形式,但除此之外,我不太确定.

有没有一种快速的方法来做到这一点而不覆盖大量的模板?

python django django-admin

6
推荐指数
2
解决办法
5465
查看次数

Django,JSONField,非空列表过滤器

我有一个 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 postgresql

6
推荐指数
2
解决办法
1307
查看次数