我正在创建一个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) 如何从呈现的选项中删除“------”?我在我的模型形式中使用:
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)
但这不是很优雅的方式:)
我的大多数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属性?
谢谢您的回答。
有没有办法将 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) 我正在尝试使用 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) 我有两个型号分类和产品.
例:
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级类别(A1,C1).如果父母有孩子,他的孩子会出现一个新的选择框(2级A2)
选项我想:
实用,假设我有7个选择框,每个框的值都是:
如何告诉Django浏览器提交(以及其他数据)发送给ManyToMany的所有三个中的最后一个Child
我可以用Javascript收集它们,但我必须告诉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应用程序中,我有以下模型:
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
[]拉丁美洲
[]北美
[] ......
有没有人对如何做到这一点有一个很好的建议?
非常感谢.
我正在尝试禁用调整大小到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无效
我正在寻找一种方法来更改 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小部件的递增/递减箭头。我该怎么做呢?
django ×10
django-widget ×10
django-forms ×6
python ×3
django-admin ×2
attributes ×1
datefield ×1
html ×1
python-3.x ×1
requirejs ×1
widget ×1