0

私は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']

およびモデルフォーム

class UploadForm(ModelForm):
   file = forms.FileField()
   category = mpttform.TreeNodeMultipleChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))
   class Meta:
         model = UploadedFile

ただし、(モデルで定義されているように) Category インスタンスであるはずの UploadForm のこのカテゴリ フィールドに問題がありますが、クエリセットは、すべてのリーフ カテゴリを表示するためにテンプレートで使用する Category オブジェクトのリストを返します。フォームのカテゴリを選択して送信すると、このエラーが発生します (cat5 を選択した場合) '[Category: cat5] を割り当てることができません: "UploadedFile.category" は "Category" インスタンスである必要があります。このエラーが発生する理由は理解していますが、save() メソッドのために ModelForm を使用したいのですが、これを修正する方法がわかりません。何か提案はありますか?

4

2 に答える 2

0

Djangoは、カテゴリを反復処理するためにカテゴリインスタンスを開始する必要があると言っています。したがって、カテゴリインスタンスはurlからparamsを取得し、urls.pyに正規表現を含むurlparamsを取得します。したがって、パラメータをキャプチャして、ビューのカテゴリインスタンスにする必要があります。

*ビューが自動的にparamsコンテキスト変数を提供するクラスベースのジェネリックビューを参照してください。

于 2012-06-03T02:13:27.063 に答える
0

おもう

category = mpttform.TreeNodeMultipleChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))

m2m関係で機能し、カテゴリはモデルのアップロードされたファイルのForeignKeyだと思います。もしそうなら、あなたは使うべきです

category = mpttform.TreeNodeChoiceField(queryset=Category.objects.filter(lft=F('rght')-1))
于 2012-06-03T03:38:32.060 に答える