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:
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.