link form example custom buttons actions django django-models django-admin manytomanyfield django-orm

form - Django Admin ManyToManyField



manytomanyfield django example (1)

He hecho un modelo (models.py):

class opetest(models.Model): name = models.CharField(max_length=200) author = models.ForeignKey(User, related_name=''author'') description = models.TextField(u''Test description'', help_text = u''Some words about quiz'') pub_date = models.DateTimeField(''date published'', blank=False) vacancies = models.ManyToManyField(Vacancy, blank=True) students = models.ManyToManyField(User, blank=True, related_name=''opetests'') #This field I want to edit on "User change page" estimate = models.IntegerField(default = 0, help_text = u''Estimate time in hours. /'0/' - unlimited'')

Luego trato de agregar un bloque en línea para permitir asignar la opetest en la página "cambiar usuario" (admin.py):

class ProfileAdmin(UserAdmin): filter_horizontal = (''opetests'',) admin.site.unregister(User) admin.site.register(User, ProfileAdmin)

Y me salió un error:

''ProfileAdmin.filter_horizontal'' refers to field ''opetests'' that is missing from model ''User''.

Quiero mostrar las pruebas como Grupos en la página de cambio de usuario . ¿Cómo puedo lograr eso?


Hmm, no creo que quieras líneas aquí.

Quieres usar el filter_horizontal del administrador de Django:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.filter_horizontal

class ProfileAdmin(UserAdmin) filter_horizontal = (''opetest'',)

Eso le dará el widget que está describiendo, que se utiliza para agregar / eliminar grupos en la página de cambio de usuario.

Ok, según sus ediciones, respuesta actualizada, básicamente, lo que tenemos es un perfil de usuario, vinculado a cada usuario.

El perfil de usuario contiene una relación m2m a opetest, que mostramos en el administrador con un filter_horizontal. El resultado final es algo como esto:

models.py

from django.db import models from django.contrib.auth.models import User class opetest(models.Model): name = models.CharField(max_length=200) author = models.ForeignKey(User, related_name=''author'') description = models.TextField(u''Test description'', help_text = u''Some words about quiz'') pub_date = models.DateTimeField(''date published'', blank=False) #vacancies = models.ManyToManyField(Vacancy, blank=True) students = models.ManyToManyField(User, blank=True, related_name=''opetests'') #This field I want to edit on "User change page" estimate = models.IntegerField(default = 0, help_text = u''Estimate time in hours. /'0/' - unlimited'') class UserProfile(models.Model): user = models.OneToOneField(User, unique=True) ope = models.ManyToManyField(opetest) test_flag = models.BooleanField()

admin.py

from django.contrib import admin from django.contrib.auth.admin import UserAdmin from django.contrib.auth.models import User from secondapp.models import UserProfile, opetest admin.site.unregister(User) class opetestAdmin(admin.ModelAdmin): pass class UserProfileInline(admin.StackedInline): model = UserProfile filter_horizontal = (''ope'',) class CustomUserAdmin(UserAdmin): #filter_horizontal = (''user_permissions'', ''groups'', ''ope'') save_on_top = True list_display = (''username'', ''email'', ''first_name'', ''last_name'', ''is_staff'', ''last_login'') inlines = [UserProfileInline] admin.site.register(User, CustomUserAdmin) admin.site.register(opetest, opetestAdmin)

Déjame saber si tienes alguna pregunta, o necesitas algo más.