标签: django-widget

Django管理GenericForeignKey小部件

我正在创建一个Django应用程序,其中所有模型可以按用户设置的顺序相互关联.我正在使用GenericForeignKeys设置所有这些.踢球者是我需要能够支持这些类型的关系/管理员的多个集合.因此,一个对象可以具有多个相关对象的集合.

有没有人知道这种情况下一个好的GenericForeignKey小部件?优选地,它将是填充管理表单的自动完成搜索,因为我最终可能具有大量对象.

这是我的应用程序的代码,以更好地了解我的意思.

from django.contrib import admin
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django import forms


# Models
class Base(models.Model):
    title = models.CharField(max_length=255)

    class Meta:
        abstract = True

    def __unicode__(self):
        return self.title

class Related(Base):
    """ A generic relationship model for relating resources.
    """
    order = models.IntegerField(blank=True, null=True)
    limit = models.Q(model = 'Apple') | models.Q(model = 'Orange') | models.Q(model = 'Pear') 

    content_type = models.ForeignKey(ContentType, related_name="related_%(class)s")
    object_id = models.PositiveIntegerField(db_index=True)
    object = generic.GenericForeignKey()

    related_content_type = models.ForeignKey(ContentType, …
Run Code Online (Sandbox Code Playgroud)

django django-admin django-widget

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

Django - CheckboxSelectMultiple 没有“------”选择

如何从呈现的选项中删除“------”?我在我的模型形式中使用:

widgets = {
    'event_form': forms.CheckboxSelectMultiple(),
}
Run Code Online (Sandbox Code Playgroud)

在模型中,我有 IntegerField 有选择:

EVENT_FORM_CHOICES = (
    (1, _(u'aaaa')),
    (2, _(u'bbbb')),
    (3, _(cccc')),
    (4, _(u'dddd')),
    (5, _(eeee'))
)
Run Code Online (Sandbox Code Playgroud)

呈现的选择包含 --------- 作为第一可能的选择。我怎样才能摆脱它?

编辑:我想出的唯一工作方法是(在init方法中):

tmp_choices = self.fields['event_form'].choices
del tmp_choices[0]
self.fields['event_form'].choices = tmp_choices
Run Code Online (Sandbox Code Playgroud)

但这不是很优雅的方式:)

django django-forms django-widget

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

在django的小部件中向js媒体字段添加属性

我的大多数JavaScript都使用AMD与requirejs一起加载,但是在Django的小部件中使用它们时遇到了麻烦。

Django的文档指出,应通过以下方式嵌入媒体:

class Media:
    js = ('animations.js')
Run Code Online (Sandbox Code Playgroud)

这将创建以下html:

<script type="text/javascript" src="http://static.example.com/animations.js"></script>
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要这个怎么办?

<script data-main="scripts/animations" src="scripts/require.js"></script>
Run Code Online (Sandbox Code Playgroud)

如何告诉django插入data-main属性?

谢谢您的回答。

django attributes django-widget requirejs

5
推荐指数
0
解决办法
157
查看次数

django 将小部件应用于所有字段

有没有办法将 css 类应用于所有字段,而不是对每个字段执行以下操作。
表格.py

class UserColorsForm(forms.ModelForm):

    class Meta:
        model = UserColors
        exclude = ('userid',)
        widgets = {
            'text_color': forms.TextInput(attrs={'class': 'color'}),
            'background_color': forms.TextInput(attrs={'class': 'color'}),
            ... 10 more
        }
Run Code Online (Sandbox Code Playgroud)

django django-forms django-widget django-widget-tweaks

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

Django python:未找到使用 DateInput --Required 参数“年份”(位置 1)

我正在尝试使用 DateInput,但Required argument 'year' (pos 1) not found在此处出现以下错误 {{ form.incident_date_time_reported|add_class:"form-control"}}(第 52 行)

表格.py

from django import forms
import datetime
from functools import partial
DateInput = partial(forms.DateInput, {'class': 'datepicker'})

class IncidentForm(forms.Form):

    incident_date_time_reported = forms.DateField(initial=datetime.date, required=False, widget=forms.DateInput)

    def search(self):

        # cleaning the data
        incident_date_time_reported = self.cleaned_data.get('incident_date_time_reported')

        query = Incident.objects.all()

        if incident_date_time_reported is not None:
            query = query.filter(incident_date_time_reported=incident_date_time_reported)


        return(query)
Run Code Online (Sandbox Code Playgroud)

索引.html

{% extends "base.html" %}
{% load widget_tweaks %}

{% block content %}
<div class="container-fluid">

    <!-----INPUT FORM------------------->
    <form action="{% url 'incidents:index' …
Run Code Online (Sandbox Code Playgroud)

python django django-forms datefield django-widget

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

将ManyToMany字段的Widget自定义为具有循环ForeignKey的Model

我有两个型号分类和产品.

  • 产品可以有多个类别
  • 一个类别可以有多个产品.
  • 类别具有循环外键,本身.
  • 并非所有类别都具有相同的深度级别

例:

  • A类
    • A_1类
    • 类别A_2
      • 类别A_2_1
  • B类
  • C类
    • C_1类

models.py

class Product:
    categories = models.ManyToManyField(Category)
    name = models.CharField(max_length=255)

class Category:
    categories = models.ForeignKey(self)
    name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

作为表单我使用ModelForm:

class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = ['categories', 'name', 'short_description', 'description']
        widgets = {
            'categories': MyWidget,
        }
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

我想实现条件选择(窄选项)在产品表单创建上:

  1. 只有顶级父类别(级别0 A,B,C)可用
  2. 用户选择父类别.如果父母有孩子,他的孩子会出现一个新的选择框(类别1 A1,C1)
  3. 用户选择1级类别(A1,C1).如果父母有孩子,他的孩子会出现一个新的选择框(2级A2)

    • 重复该过程,直到没有子项可用(递归),用户选择树中的"最小"类别
    • 用户可以使用新按钮添加更多类别并再次启动1-3流程
    • 我想做选择,使用JavaScript添加新选择
    • 在表单提交我想只发送最后的子类别

选项我想:

  1. 更改ManyToMany相应的默认字段 - 看起来没有好的挂钩和/或继承
  2. 使用ManytoMany的非默认自定义字段instean(如Charfield) - 在清理,保存表单上更复杂
  3. 更改/继承小部件.我的问题是如何在提交时将数据发送到默认字段,并在编辑时显示/显示它

实用,假设我有7个选择框,每个框的值都是:

  1. Parent1-> Child11-> Child111
  2. Parent2-> Child21
  3. Parent3-> Child31-> Child311

如何告诉Django浏览器提交(以及其他数据)发送给ManyToMany的所有三个中的最后一个Child

我可以用Javascript收集它们,但我必须告诉Django获取这些数据,这就是你需要的. …

django django-forms django-widget

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

如何修改Django中某种类型的所有内置表单字段的默认小部件?

这是关于如何更改ModelForm中所有Django日期字段的默认小部件的后续内容?.

假设您有大量模型(例如A-ZZZ)随着您无法控制的其他开发人员的输入而增长,并且您希望更改所有日期字段的输入方式(即使用jQueryUI).确保使用新窗口小部件填写所有日期字段的最佳方法是什么?

引用问题的一个建议是:

def make_custom_datefield(f):
   if isinstance(f, models.DateField):
       # return form field with your custom widget here...
   else:
       return f.formfield()

class SomeForm(forms.ModelForm): 
   formfield_callback = make_custom_datefield

   class Meta:
       # normal modelform stuff here...
Run Code Online (Sandbox Code Playgroud)

但是,如果您没有明确的ModelForm,这可能会发生吗?但是url模式直接来自模型吗?即你的网址配置是likeo:

url(r'^A/?$', 'list_detail.object_list', SomeModelA)
Run Code Online (Sandbox Code Playgroud)

其中SomeModelA是Django在后台变成ModelForm的模型(不是表单).

目前在我的系统中,每个模型都没有表格.明确创建表单的唯一方法是添加先前解决方案中建议的formfield_callback,但这违反了DRY原则,并且容易出错并且需要大量人力.

我已经考虑过(正如在最后一个帖子中所建议的)创建我自己的字段,该字段具有特殊的小部件并使用它而不是内置的.它不是那么费力,但它可能会出错(但没有好的grep无法修复).

建议和想法表示赞赏.

django widget django-forms django-widget

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

在Django中对CheckboxSelectMultiple选项进行分组

在我的Django应用程序中,我有以下模型:

class SuperCategory(models.Model):
  name = models.CharField(max_length=100,)
  slug = models.SlugField(unique=True,)

class Category(models.Model):
  name            = models.CharField(max_length=100,)
  slug            = models.SlugField(unique=True,)
  super_category  = models.ForeignKey(SuperCategory)
Run Code Online (Sandbox Code Playgroud)

我想在Django的管理界面中完成的是使用小部件CheckboxSelectMultiple 渲染Category,但是按类别SuperCategory分组,如下所示:


类别:

运动:< - SuperCategory项目
[]足球< - 类别项目
[]棒球< - 类别项目
[] ...

政治:< - 另一项SuperCategory
[]拉丁美洲
[]北美
[] ......


有没有人对如何做到这一点有一个很好的建议?

非常感谢.

python django django-admin django-widget

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

如何在django中禁用resize textarea?

我正在尝试禁用调整大小到django中的textarea小部件,这是我的表单:

class VForm(forms.ModelForm):
    class Meta:
        model = Visions
        widgets = {'vision': forms.Textarea(attrs={'rows':6,
                                                   'cols':22,
                                                   'resize':'none'}),
        }
Run Code Online (Sandbox Code Playgroud)

将resize属性添加到none无效

html django django-widget

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

如何在 Django 表单中为 IntegerField 设置 NumberInput 小部件的宽度和输入限制

我正在寻找一种方法来更改 Django 表单中输入框的宽度。

参数的模型代码如下所示:

my_integer = models.IntegerField('Window', default=50)
Run Code Online (Sandbox Code Playgroud)

并且,将其放入表单中,生成的 HTML 代码如下:

<input id="id_my_integer" name="my_integer" value="50" type="number">
Run Code Online (Sandbox Code Playgroud)

而且,这个框相当宽——大约有 20 个字符。

如果我在表单类 Meta 的定义中添加代码:

widgets = {
  'my_integer': forms.TextInput(attrs={'size':'3', 'maxlength':'3'}),
}
Run Code Online (Sandbox Code Playgroud)

我得到一个 5-6 个字符宽的框,可让我插入 3 个字符,HTML 代码将类型更改为 type='text' 并且递增/递减箭头消失。

所以,我真正想要的是一个 3 个字符宽的框,具有 3 个字符的输入限制,并具有NumberInput小部件的递增/递减箭头。我该怎么做呢?

python django django-forms django-widget python-3.x

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