- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在制作按类别分组的分类目录。
但是当我提交表单时,我收到以下错误消息:
Caught ValueError while rendering: Cannot assign "u'9'": "Classified.category" must be a "Category" instance.
我相信这是因为 Django 需要一个类别对象,而不是一个与所选类别 ID 相对应的简单整数。
下面是我写的系统:分类链接到一个类别。类别系统是分层的,具有父类别和子类别列表。例如我有这样的东西:
Electronics
|-- IPad
|-- IPods
|-- ...
所以我有以下模型:
class Category(BaseModel):
# [...]
name = models.CharField(u'Name', max_length=50)
slug = AutoSlugField(populate_from='name', slugify=slugify, unique=True,
unique_with='name', max_length=255, default='')
parent = models.IntegerField(u'parent', max_length=10, null=False,
default=0)
objects = CategoryManager()
# [...]
class Classified(BaseModel):
# [...]
category = models.ForeignKey(Category, related_name='classifieds')
我创建了以下管理器:
class CategoryManager(Manager):
def categoryTree(self):
tree = self.raw("SELECT"
" P.id, P.name parent_name, P.slug parent_slug, P.id parent_id,"
" C.name child_name, C.slug child_slug, C.id child_id"
" FROM classified_category C"
" LEFT JOIN classified_category P ON P.id = C.parent"
" WHERE C.parent <> 0"
" ORDER BY P.name, C.name;")
categoryTree = []
current_parent_id = tree[0].parent_id
current_parent_name = tree[0].parent_name
option_list = []
for c in tree:
if current_parent_id != c.parent_id:
categoryTree.append((current_parent_name, option_list))
option_list = []
current_parent_id = c.parent_id
current_parent_name = c.parent_name
option_list.append((c.child_id, c.child_name))
categoryTree.append((current_parent_name, option_list))
return category
我的 Django 表单包含以下内容:
class ClassifiedForm(forms.ModelForm):
# [...]
category = forms.ChoiceField(label=u'Category', required=True,
choices=Category.objects.categoryTree(), widget=forms.Select())
# [...]
如果我使用 category = forms.ModelChoiceField(Category.objects.all()) 一切正常,但我需要控制 <select>
的方式字段显示为 <optgroup>
的列表.这就是为什么使用 categoryTree()但不幸的是,使用 CategoryManager.categoryTree() 破坏了我的表单验证,我不知道如何解决我的问题。
如果我能指出我错在哪里以及如何解决这个问题,那就太棒了。
预先感谢您的帮助。
最佳答案
快速解决方案是手动保存类别
class ClassifiedForm(forms.ModelForm):
# [...]
category = forms.ChoiceField(label=u'Category', required=True,
choices=Category.objects.categoryTree(), widget=forms.Select())
class Meta:
exclude=('category',)
def save(self):
classified = super(ClassifiedForm, self).save(commit=False)
classified.category = Category.objects.get(id=self.cleaned_data['category'])
classified.save()
return classified
关于python - 无法使用 ChoiceField 检查表单值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8667684/
我有以下表格: class MyForm(forms.Form): country = forms.ChoiceField( widget = forms.Select()
是否可以为 ChoiceField 显示选项按钮而不是选择框(在管理界面中) ?有什么建议? 最佳答案 以下ModelAdmin子类(在您的 admin.py 中)执行您想要的操作: class Pe
使用ChoiceField在数据库中创建值的下拉列表时遇到问题。这是代码片段 from django import forms from testplatform.models import Serv
我有一个简单的 ChoiceField,并且想要在模板渲染期间访问“选定”项目。 假设表单再次显示(由于其中一个字段出现错误),有没有办法执行类似的操作: The options you selec
我有两个关于 Django ChoiceField 的问题: 这是我的表格: class ContactForm(forms.Form): GENDER = ( (1, _("Mr
我已经从一个模型构建了这个表格。 class Configure_template(forms.Form): subject_type = forms.ChoiceField(choices=
我希望我的表单中有几个字段被呈现为 ChoiceFields,它们从数据库中获取它们的内容。 我在想: class SeriesForm(ModelForm): series = forms.Ch
我的 model.py 中有这个 class marca(models.Model): marcas = ( ('chevrolet', 'Chevrolet'),
我看到了 forms.ChoiceField 正在使用 this code验证值: def validate(self, value): """ Validates that the
我的模型中有外键条目,我想用于我的选择字段......现在我不太确定如何处理这个......我的模型文件可以找到 here基本上我想要一个选择字段,用于车辆制造、型号、年份、车身风格、外观颜色和变速箱
我希望 ModelForm 中的 ChoiceField 有一个空白选项 (------) 但它是必需的。 我需要有空白选项以防止用户意外跳过该字段从而选择错误的选项。 最佳答案 这至少适用于 1.4
Django ChoiceField “验证给定的值存在于选项列表中。” 我想要一个 ChoiceField(所以我可以在 View 中输入选项)但我不希望 Django 检查该选项是否在选项列表中。
我需要让公司的其他用户在 ModelForm 中设置主要用户,我不知道如何为此获取表单内的变量? 在 View 中需要的变量是: request.user.profile.firm 这是需要创建的表单
我有这样的东西: 表单.py: AVATAR_CHOICES = (('1','option1'), ('2','option2'), ('3','option3'), ('4','option4')
我有一个带有 charfield 和 choicefield 的多值字段。我需要将选择传递给 choicefield 构造函数,但是当我尝试将其传递到自定义多值字段时,我收到错误 __init__()
我有一个表单,它被赋予了选择字典,它正确填充它,但在表单提交时它无效。当尝试打印 errors, non_field_errors 时,只有空白。当我重定向到表单时,现在选择字段由一个选项和上一次提交
我有一个绑定(bind)形式的 ChoiceField,其选择是: [('all', 'All users'), ('group', 'Selected groups'), ('none', 'Non
当我提交空的 radio 输入时遇到问题。如果我选择一个选项,该表单就可以正常工作;但是,如果我将其留空,则会收到以下错误 - MultiValueDictKeyError at / Key 'lik
假设我的 Django 模型中有 ChoiceField,其中包含多个选项。 现在,如果我将现有的选择(选项)更改为其他名称(选择),那么模型中具有该选择(选项)的现有记录是否也会更改?我是否需要在管
如何使 ChoiceField 的标签表现得像 ModelChoiceField?有没有办法设置一个empty_label,或者至少显示一个空白字段? 表格.py: thing = forms.Mod
我是一名优秀的程序员,十分优秀!