python - template - ¿Django filtra muchos a muchos campos en admin?
import django template (3)
Es posible con django-selectable o django-autocomplete-light .
Tengo tres objetos:
Thing
some fields
Bucket
things = models.ManyToManyField(Thing)
User
buckets = models.ManyToManyField(Bucket)
things = models.ManyToManyField(Thing)
Al editar mi campo "Bucket" en el administrador, quiero poder seleccionar Cosas, pero solo aquellas que se encuentran en la lista de "Cosas" en el usuario que está conectado actualmente.
¿Cómo puedo hacer eso? En otras palabras, ¿cómo puedo filtrar la lista de cosas en el administrador de Bucket?
Muchas gracias por adelantado por su ayuda.
Hay un formfield_for_manytomany . El uso es similar a la respuesta dada por defuz.
ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶
Al igual que el método
formfield_for_foreignkey
, el métodoformfield_for_manytomany
se puede anular para cambiar el campo de formulario predeterminado para un campo de muchos a muchos. Por ejemplo, si un propietario puede tener varios automóviles y los automóviles pueden pertenecer a múltiples propietarios, una relación de muchos a muchos, podría filtrar el campo de clave foránea de Coche para mostrar solo los coches que son propiedad del Usuario:
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)
Lea los documentos :
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)