Как автоматически вставить текущего пользователя при создании объекта в django admin?

У меня есть база данных статей с

submitter = models.ForeignKey(User, editable=False)

Где User импортируется следующим образом:

from django.contrib.auth.models import User. 

Я хотел бы автоматически вставить текущего активного пользователя в поле отправителя, когда конкретный пользователь отправляет статью.

У кого-нибудь есть предложения?

Ответ 1

На всякий случай кто-то ищет ответ, вот решение, которое я нашел здесь: http://demongin.org/blog/806/

Подводя итог: У него была таблица эссе:

from django.contrib.auth.models import User

class Essay(models.Model):
    title = models.CharField(max_length=666)
    body = models.TextField()
    author = models.ForeignKey(User, null=True, blank=True)

где многопользователь может создавать эссе, поэтому он создал класс admin.ModelAdmin следующим образом:

from myapplication.essay.models import Essay
from django.contrib import admin

class EssayAdmin(admin.ModelAdmin):
    list_display = ('title', 'author')
    fieldsets = [
        (None, { 'fields': [('title','body')] } ),
    ]

    def save_model(self, request, obj, form, change):
        if getattr(obj, 'author', None) is None:
            obj.author = request.user
        obj.save()

Ответ 2

Если вы не хотите, чтобы пользовательский интерфейс был включен в вашу модель, то в вашем методе admin.py override save

obj.author = request.user.username
obj.save()

Здесь будет сохранено имя пользователя, зарегистрированного в вашем db.

Ответ 3

По http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields вы не можете использовать ForeignKey с директивой admin preopulated_field, alas

Но этот поток может вам помочь. В своем ответе я также ссылаюсь на версию Pro Django, отсканированную Google, которая имеет отличное решение для такого рода вещей. В идеале, я уверен, что лучше, если вы можете купить книгу, но Google, похоже, в любом случае имеет большую часть соответствующей главы.