小编Hen*_*nri的帖子

Django表单:如何动态创建ModelChoiceField标签

我想为forms.ModelChoiceField创建动态标签,我想知道如何做到这一点.我有以下表单类:

class ProfileForm(forms.ModelForm):

    def __init__(self, data=None, ..., language_code='en', family_name_label='Family name', horoscope_label='Horoscope type', *args, **kwargs):
        super(ProfileForm, self).__init__(data, *args, **kwargs)

        self.fields['family_name'].label = family_name_label
        .
        .
        self.fields['horoscope'].label = horoscope_label
        self.fields['horoscope'].queryset = Horoscope.objects.all()

    class Meta:
        model = Profile

    family_name = forms.CharField(widget=forms.TextInput(attrs={'size':'80', 'class': 'contact_form'}))
    .
    .
    horoscope = forms.ModelChoiceField(queryset = Horoscope.objects.none(), widget=forms.RadioSelect(), empty_label=None)
Run Code Online (Sandbox Code Playgroud)

默认标签由"配置文件"定义中指定的unicode函数定义.但是,需要动态创建ModelChoiceField创建的单选按钮的标签.

首先,我认为我可以简单地重写ModelChoiceField,如Django文档中所述.但这会创建静态标签.它允许您定义任何标签,但一旦做出选择,该选择是固定的.

所以我认为我需要适应添加一些东西到init:

class ProfileForm(forms.ModelForm):

    def __init__(self, data=None, ..., language_code='en', family_name_label='Family name', horoscope_label='Horoscope type', *args, **kwargs):
        super(ProfileForm, self).__init__(data, *args, **kwargs)

        self.fields['family_name'].label = family_name_label
        .
        .
        self.fields['horoscope'].label = horoscope_label …
Run Code Online (Sandbox Code Playgroud)

django django-forms

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

是一个总是需要的ModelChoiceField?

我有一个模特

class Article(models.Model):
    .
    .
    language = models.ForeignKey(Language, help_text="Select the article's language")
    parent_article = models.ForeignKey('self', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

如果文章是原始文章,那么'parent_article = None'.如果文章是翻译,那么'parent_article'<>无.

所以我创建了:

class ArticleAdminForm(forms.ModelForm):
    .
    .
    parent_article = forms.ModelChoiceField(queryset=AyurvedicArticle.objects.filter(parent_article=None), help_text="Select the parent article (if any)")

    class Meta:
        Article

class ArticleAdmin(admin.ModelAdmin):
    form = ArticleAdminForm
    .
    .
Run Code Online (Sandbox Code Playgroud)

现在,当我应用所有这些似乎工作正常,但当我没有选择'父文章'时,我在管理员中收到一条错误消息,声明"此字段是必需的",即使模型说:"null = True,Blank =真".

当我不使用自定义表格时,即发酵声明

class ArticleAdmin(admin.ModelAdmin):
#    form = ArticleAdminForm
    .
    .
Run Code Online (Sandbox Code Playgroud)

一切都运转,除了现在我有很多选择.在"ModelChoicesField"的文档中,您可以阅读短语"请注意,如果需要ModelChoiceField ......",这意味着不需要ModelChoiceField.

知道怎么处理这个吗?

forms django models

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

PostgreSQL 9.1在select语句中使用collat​​e

我有一个postgresql 9.1数据库表,"en_US.UTF-8":

CREATE TABLE branch_language
(
    id serial NOT NULL,
    name_language character varying(128) NOT NULL,
    branch_id integer NOT NULL,
    language_id integer NOT NULL,
    ....
)
Run Code Online (Sandbox Code Playgroud)

name_language属性包含各种语言的名称.该语言由外键language_id指定.

我创建了一些索引:

/* us english */
CREATE INDEX idx_branch_language_2
    ON branch_language
    USING btree
    (name_language COLLATE pg_catalog."en_US" );

/* catalan */
CREATE INDEX idx_branch_language_5
    ON branch_language
    USING btree
    (name_language COLLATE pg_catalog."ca_ES" );

/* portuguese */
CREATE INDEX idx_branch_language_6
    ON branch_language
    USING btree
    (name_language COLLATE pg_catalog."pt_PT" );
Run Code Online (Sandbox Code Playgroud)

现在,当我做一个选择时,我没有得到我期待的结果.

select name_language from branch_language
where language_id=42 -- id of …
Run Code Online (Sandbox Code Playgroud)

postgresql collate

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

Django,访问 PostgreSQL 序列

在 Django 应用程序中,我需要创建一个订单号,如下所示:yyyymmddnnnn,其中 yyyy=年,mm=月,dd=日,nnnn 是 1 到 9999 之间的数字。

我想我可以使用 PostgreSQL 序列,因为生成的数字是原子的,所以我可以确定当进程获取一个数字时,该数字是唯一的。

所以我创建了一个 PostgreSQL 序列:

CREATE SEQUENCE order_number_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9999
START 1
CACHE 1
CYCLE;
Run Code Online (Sandbox Code Playgroud)

该序列可以作为具有一行的表来访问。因此,在文件 checkout.py 中,我创建了一个 Django 模型来访问此序列。

class OrderNumberSeq(models.Model):
    """
    This class maps to OrderNumberSeq which is a PostgreSQL sequence.
    This sequence runs from 1 to 9999 after which it restarts (cycles) at 1.
    A sequence is basically a special single row table.
    """
    sequence_name = models.CharField(max_length=128, primary_key=True)
    last_value = models.IntegerField()
    increment_by = …
Run Code Online (Sandbox Code Playgroud)

django postgresql django-models

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

Django ModelForm ImageField

我有一个模型和一个表单(forms.ModelForm),其中有一个 ImageField。该模型类似于:

class Business(models.Model):
    business_name = models.CharField(max_length=128)
    .
    .
    business_image = ImageField(
        max_length=128, 
        upload_to=upload_business_image_handler,
        height_field='business_image_height',
        width_field='business_image_width'
        )
    business_image_height = models.IntegerField(blank=True, null=True)
    business_image_width = models.IntegerField(blank=True, null=True)
    .
    .
Run Code Online (Sandbox Code Playgroud)

附表:

class BusinessForm(forms.ModelForm):
    def __init__(self, data=None, files=None, branch_list = None, country_list = None, *args, **kwargs):
        super(BusinessForm, self).__init__(data, *args, **kwargs)
        # create the MultipleChoiceField choice_list based on language
        self.fields['branch'].choices = branch_list
        self.fields['country'].choices = country_list
        self.postdata = data
        self.files = files

    business_name = forms.CharField(widget=forms.TextInput(attrs={'size':'50', 'class': 'address'}), required=True)

    #business_image = forms.ImageField(widget=forms.ClearableFileInput())
Run Code Online (Sandbox Code Playgroud)

表单中的最后一行被注释掉,因为 forms.ClearableFileInput() 是 FileFields 和 …

forms django

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

在 Django Admin 中使用属性

我有一个字段定义为的模型

p = models.DecimalField(max_digits=12, decimal_places=6)
Run Code Online (Sandbox Code Playgroud)

但decimal_places=6 仅用于内部精度。我只想在管理字段中显示 2 个小数位。所以我想也许我可以用属性做点什么。但是属性不会在管理界面中显示为字段。例如:数据库记录:100.256754 admin 编辑字段显示:100.26

有没有办法做到这一点?

django admin decimal models

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