2

django-mptt を使用して Categories モデルを作成し、それを Documents モデルの外部キーとして使用しています。カテゴリ管理は正常に機能し、カテゴリは期待どおりにツリー順に表示されます。ただし、admin でドキュメント モデルを注文する際に 2 つの問題があります。

管理者リストのドキュメントがカテゴリ順ではなく ID 順で表示される 編集画面のカテゴリのドロップダウン リストがカテゴリ ID 順で表示されます。別の理由で、カテゴリに抽象クラスを使用していたことに注意してください。

モデルで指定した順序が無視されるのはなぜですか?

モデル.py

class Category(MPTTModel):
 parent = models.ForeignKey('self', related_name="children")
 name = models.CharField(max_length=100)


  class Meta:
    abstract = True
    ordering = ('tree_id', 'lft')

  class MPTTMeta:
    ordering = ('tree_id', 'lft')
    order_insertion_by = ['name',]

class CategoryAll(Category):

  class Meta:
    verbose_name = 'Category for Documents'
    verbose_name_plural =  'Categories for Documents'


class Document(models.Model):
  title = models.CharField(max_length=200)
  file = models.FileField(upload_to='uploads/library/all', blank=True, null=True)
  category = models.ForeignKey(CategoryAll)

  class Meta:
    ordering = ('category__tree_id', 'category__lft', 'title')

Admin.py

class DocAdmin(admin.ModelAdmin):

  list_display = ('title', 'author', 'category')
  list_filter = ('author','category')
  ordering = ('category__tree_id', 'category__lft', 'title')

更新修正:

モデル.py

class Category(MPTTModel):
 parent = models.ForeignKey('self', related_name="children")
 name = models.CharField(max_length=100)


  class Meta:
    abstract = True

  class MPTTMeta:
    order_insertion_by = ['name',]

class CategoryAll(Category):

  class Meta:
    verbose_name = 'Category for Documents'
    verbose_name_plural =  'Categories for Documents'
    ordering = ('lft',)

class Document(models.Model):
  title = models.CharField(max_length=200)
  file = models.FileField(upload_to='uploads/library/all', blank=True, null=True)
  category = models.ForeignKey(CategoryAll)

  class Meta:
    ordering = ('category__tree_id', 'category__lft', 'title')

Admin.py

class DocAdmin(admin.ModelAdmin):

  list_display = ('title', 'author', 'category')
  list_filter = ('author','category')
  ordering = ('category__lft',)
4

1 に答える 1

2

OK-ある程度の持続性で答えが見つかりました:

表示リストの順序が正しくないのはなぜですか? 最初のフィールドのみを使用するため:

ModelAdmin.ordering 順序を設定して、Django 管理ビューでオブジェクトのリストを順序付ける方法を指定します。これは、モデルの順序付けパラメーターと同じ形式のリストまたはタプルである必要があります。

これが指定されていない場合、Django 管理者はモデルのデフォルトの順序を使用します。

注 Django はリスト/タプルの最初の要素のみを尊重します。それ以外は無視されます。

選択ドロップダウンの順序が正しくないのはなぜですか? 抽象モデルだけでなく、サブクラスにも順序が必要だったからです。

于 2011-03-15T16:46:03.347 に答える