Как я могу на лету создать группу аутентификации при создании другого объекта с сайта администратора?
- У меня есть модель, которая создает какой-то объект (скажем, курс).
- Я добавляю новые объекты из интерфейса администратора
Когда я создаю объект, я хотел бы автоматически создать Auth Group с определенным именем (не важно, но имя группы должно совпадать с именем поля созданного объекта).
Является ли это возможным? Я прочитал кое-что о действиях администратора, но не нашел ничего ясного.
2 ответа
Решение
Вы можете легко создать группу, выполнив следующие действия:
from django.contrib.auth.models import Group
newgroup = Group.objects.create(name=course.name)
Вы можете поместить этот код в свои модели следующим образом (или, возможно, создать собственный менеджер моделей):
from django.contrib.auth.models import User, Group
class Course(models.Model):
name = models.CharField(max_length=100)
@classmethod
def create(course, name):
newcourse = course(title=name)
# create the group for the course
newgroup = Group.objects.create(name=newcourse.name)
return newcourse
Затем вы можете создать свой курс:
course = Course.create(name="Django: The Web framework for perfectionists with deadlines")
Даниэль, кажется, хорошее приближение. Я управлял решением, а также переопределял метод save_model для модели CourseAdmin внутри admin.py. Большое спасибо, ваша реализация кажется чище!
Вот что я сделал:
----- admin.py -----
from django.contrib.auth.models import Group
class CourseAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
g = Group(name=obj.code)
g.save()
obj.save() # Without this line the object is not saved into the Course model!
admin.site.register(CourseAdmin)