我有一个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中的这个类别字段有问题,它应该是Category实例(在Model中定义),但我的queryset返回我在模板中用来显示所有叶子类别的Category对象列表。如果我在表单上选择任何类别并提交它,我收到此错误(如果我选择cat5)'无法分配[类别:cat5]:“UploadedFile.category”必须是“类别”实例。 所以我理解为什么会发生这种错误,但我想使用ModelForm因为save()方法,但是我不知道如何解决这个问题。有什么建议吗?
答案 0 :(得分:0)
Django告诉您必须启动一个类别实例才能迭代这些类别。所以类别实例从你的urls.py中的url,url params和regex中获取params。因此,您需要捕获参数并将其作为视图中的类别实例。
*参见基于类的通用视图,其中视图会自动为您提供params上下文变量。
答案 1 :(得分:0)
我认为
category = mpttform.TreeNodeMultipleChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))
适用于m2m关系,我猜类别是模型Uploaded File中的ForeignKey。如果是这样,你应该使用
category = mpttform.TreeNodeChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))