我有一个Django模型
class Category(MPTTModel):
name = models.CharField(max_length=50, unique=True)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
def __unicode__(self):
return self.name
class MPTTMeta:
order_insertion_by = ['name']和ModelForm
class UploadForm(ModelForm):
file = forms.FileField()
category = mpttform.TreeNodeMultipleChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))
class Meta:
model = UploadedFile然而,我在UploadForm中的这个类别字段遇到了问题,它应该是类别实例(在模型中定义),但是我的查询集返回类别对象列表,我在模板中使用它来显示所有叶categories.If。我选择表单上的任何类别并提交它,我得到这个错误(如果我选择cat5)‘无法分配类别: cat5:"UploadedFile.category“必须是一个”类别“实例。’所以我理解为什么会发生这个错误,但是由于this.Any ()方法,我想使用ModelForm,但是不知道如何修复this.Any建议?
发布于 2012-06-03 10:13:27
Django告诉您,您必须启动一个category实例才能迭代categories。因此,category实例从url中获取参数,url参数在urls.py中使用正则表达式。因此,您需要捕获该参数,并使其成为视图中的类别实例。
*查看基于类的泛型视图,其中的视图会自动为您提供params上下文变量。
发布于 2012-06-03 11:38:32
我认为
category = mpttform.TreeNodeMultipleChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))适用于类别关系,我猜m2m是模型上传文件中的ForeignKey。如果是这样,您应该使用
category = mpttform.TreeNodeChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))https://stackoverflow.com/questions/10864577
复制相似问题