32

私は3つのオブジェクトを持っています:

Thing
  some fields

Bucket
  things = models.ManyToManyField(Thing)

User
  buckets = models.ManyToManyField(Bucket)
  things = models.ManyToManyField(Thing)

管理者の「バケット」フィールドを編集するときに、モノを選択できるようにしたいのですが、現在ログインしているユーザーの「モノ」リストにあるものだけを選択できます。

どうやってやるの?言い換えれば、バケット管理でモノのリストをフィルタリングするにはどうすればよいですか?

よろしくお願いいたします。

4

3 に答える 3

41

There is a formfield_for_manytomany. Usage is similar to the answer given by defuz.

ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶

Like the formfield_for_foreignkey method, the formfield_for_manytomany method can be overridden to change the default formfield for a many to many field. For example, if an owner can own multiple cars and cars can belong to multiple owners – a many to many relationship – you could filter the Car foreign key field to only display the cars owned by the User:

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "cars":
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
于 2013-07-03T20:46:25.437 に答える
27

ドキュメントを読む:

class BucketAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "things":
             kwargs["queryset"] = Things.objects.filter(...)
        return super(BucketAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
于 2012-08-29T12:19:28.790 に答える
0

django-selectableまたはdjango-autocomplete-lightで可能です。

于 2012-08-29T09:56:27.590 に答える