dauren101
@dauren101
Python, Django ,Vue.js

При сохранении в админке записывать id юзера?

Нужно в админке при сохранении объекта также сделать сохранение id юзера
как это сделать?
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@javedimka
Хочу сока
В общем дошел до дома, подробнее напишу. Если у тебя определено поле для юзера в модели, то ты его можешь вообще вручную выбрать, а если лень это делать то можно так.
Допустим у тебя есть приложение для публикации статей "articles", в articles/models.py есть модель статьи, в которой есть поле с пользователем который ее добавил, можно добавить еще одно поле для пользователя который ее последний раз редактировал, а можно и не добавлять если нужен только пользователь добавивший статью:
# остальные импорты опущены 
from django.conf import settings


class Article(models.Model):
    ...
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                                 related_name="articles_added")
    last_edited_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                                       related_name="articles_edited")
    ...

Так как два поля ссылаются на одну модель, нужно определить для них related_name чтобы потом с помощью него можно было работать с ORM, типо чтобы получить все статьи добавленные пользователем:
*объект_нужного_пользователя*.articles_added.all()

Потом в файле articles/admin.py определяешь новую модель для "администратирования" этого объекта:

from django.contrib import admin 
from .models import Article


class ArticleAdmin(admin.ModelAdmin):
    readonly_fields = ("last_edited_by",) # делаем полем рид онли, чтобы нельзя было его отредактировать

    def save_model(self, request, obj, form, change):
        if change: # True если изменяется уже существующий объект, False если добавляется новый
            # определяем и записываем пользователя если изменяется существующий объект
            obj.last_edited_by = request.user 
        else:
            # определяем и записываем пользователя если добавляется новый объект
            obj.added_by = request.user 
        super(ArticleAdmin, self).save_model(request, obj, form, change)


admin.site.register(Article, ArticleAdmin)

Все, пробуй. Если не нужен юзер редактировавший статью, то, надеюсь, разберешься что удалить надо?

Подробнее о save_model():
https://docs.djangoproject.com/en/1.10/ref/contrib...
Подробнее о request:
https://docs.djangoproject.com/en/1.10/ref/request...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы