Как я могу на лету создать группу аутентификации при создании другого объекта с сайта администратора?

  • У меня есть модель, которая создает какой-то объект (скажем, курс).
  • Я добавляю новые объекты из интерфейса администратора

Когда я создаю объект, я хотел бы автоматически создать 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)
Другие вопросы по тегам