Tengo una relación de muchos a muchos entre 2 tablas Usuarios y dominios. He definido esta relación en la clase Dominios. Entonces, en la interfaz de administración veo a los usuarios cuando estoy viendo dominios. Pero no veo los Dominios cuando estoy viendo Usuarios. ¿Cómo puedo lograr esto?Forma de administración de Django para la relación de muchos a muchos
Respuesta
Creo que lo que estás buscando es InlineModelAdmin.
La única forma incorporada es a través de InlineModelAdmin, pero puede usar un ModelForm personalizado con su User ModelAdmin para crear un campo para este fin. Consulte el siguiente código para obtener una configuración simplificada (asume users = ManyToManyField(related_name='domains')
).
### yourapp/admin.py ###
from django import forms
from django.contrib import admin
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.contrib.admin.widgets import FilteredSelectMultiple
from .models import Domain
class DomainAdmin(admin.ModelAdmin):
filter_horizonal = ('users',)
class UserAdminForm(forms.ModelForm):
domains = forms.ModelMultipleChoiceField(
queryset=Domain.objects.all(),
required=False,
widget=FilteredSelectMultiple(
verbose_name=_('Domains'),
is_stacked=False
)
)
class Meta:
model = User
def __init__(self, *args, **kwargs):
super(UserAdminForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['domains'].initial = self.instance.domains.all()
def save(self, commit=True):
user = super(UserAdminForm, self).save(commit=False)
user.domains = self.cleaned_data['domains']
if commit:
user.save()
user.save_m2m()
return user
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
admin.site.register(Domain, DomainAdmin)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
? Esto no funcionó para mí al agregar el "usuario" (no un "Usuario" en mi caso). Necesitaba verificar 'self.instance.id' en el método' __init__', y necesitaba 'guardar()' el nuevo objeto antes de asignarle dominios. – alalonde
sé que este es un hilo viejo, pero este fue el primer resultado que apareció en Google y me pareció una respuesta mejor era necesario.
Via this django bug report He encontrado la mejor manera de tener su ManyToManyField aparece en ambos modelos:
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)
he probado yo mismo y era muy satisfechos con los resultados.
Aparece el mensaje de error "Test2" no definido, que parece lógico porque Test2 no está definido cuando se llama. Su solución sería genial si funciona bien – Timo
Para las personas que todavía tropezar con esto, podría valer la pena comprobar https://github.com/kux/django-admin-extend
Proporciona un mecanismo para inyectar bidireccionales campos de muchos a muchos en ModelAdmins que ya han sido definidas por otras aplicaciones.
- 1. Habilitación de Django administración filtros en muchos-a-muchos campos
- 2. Relación de muchos a muchos
- 3. Solicitud de un campo Muchos-A-Muchos de Django administración
- 4. Django: accediendo a muchos a muchos objetos a través de otra relación Muchos a Muchos
- 5. Relación Muchos a Muchos
- 6. Filtro de muchos a muchos relación en Django
- 7. django relación uno a muchos
- 8. Cómo eliminar fácilmente la relación muchos a muchos con Django
- 9. ORM de Django forma de recorrer múltiples de muchos a muchos relación
- 10. jpa criterios para la relación de muchos a muchos
- 11. relación muchos-a-muchos SQLite?
- 12. Cómo administrar la relación de muchos a uno en Django
- 13. cheque JPQL muchos-a-muchos relación
- 14. Mejor manera de representar la relación Muchos a muchos en django admin
- 15. Django Muchos a muchos a través de la forma de tabla intermedia como la forma tabular en línea del administrador?
- 16. queryset Django para muchos-a-muchos coloca
- 17. EntityFramework Misma tabla Muchos a muchos Relación
- 18. AutoMapper relación de muchos a muchos en la colección
- 19. SQL: relación muchos a muchos, condición IN
- 20. Django Muchos a muchos Insertar pedidos
- 21. Spring + JPA relación muchos a muchos
- 22. Búsqueda de artículos en una relación muchos a muchos
- 23. Aplanamiento de la relación uno a muchos en Django
- 24. Diseño de relación de muchos a muchos - Intersection Table Design
- 25. 'Muchos a dos' relación
- 26. sqlalchemy muchos-a-muchos relación de tablas declarativas
- 27. Django/Python - Agrupación de objetos por conjunto común de una relación de muchos a muchos
- 28. Ejemplos de consultas en una relación muchos a muchos
- 29. Cómo organizar una relación de muchos a muchos en MongoDB
- 30. Agregando muchos objetos en línea a muchos en Django admin
Probablemente no es lo que esperaba el OP (una forma de utilizar el selector de filtro ManyToMany habitual desde cualquier lado de la relación), pero esta es la solución que yo también usaría. –
¿Cómo me refiero a la tabla de relaciones (Dominios_usuario en mi caso) No tengo una tabla intermedia explícita. En este caso, ¿cómo utilizo InlineModelAdmin para ManyToManyRelationship –