Пользовательские поля Django на моделях - PullRequest
0 голосов
/ 02 марта 2011

Я бы хотел, чтобы каждая модель моего приложения сохраняла пользователя, создавшего свои записи. Что я сделал:

class SomeModel(models.Model):
    # ...
    user = models.ForeignKey(User, editable = False)

class SomeModelAdmin(admin.ModelAdmin):
    # ...
    def save_model(self, request, obj, form, change):
        # Get user from request.user and fill the field if entry not existing

Мой вопрос: поскольку существует целое приложение для аутентификации и истории пользователей, существует ли простой способ (возможно, более ориентированный или стандартизированный) использования какой-либо функции этого приложения вместо выполнения описанной выше процедуры для каждой модели?

Обновление:

Вот что я сделал. Это выглядит ужасно для меня. Пожалуйста, дайте мне знать, если есть умный способ сделать это.

Я расширил все модели, которые я хотел, чтобы эти модели были представлены на models.py:

class ManagerLog(models.Model):
    user = models.ForeignKey(User, editable = False)
    mod_date = models.DateTimeField(auto_now = True, editable = False, verbose_name = 'última modificação')
    class Meta:
        abstract = True

В admin.py я проделал то же самое со следующим классом:

def manager_log_save_model(self, request, obj, form, change):
    obj.user = request.user
    return obj

Затем мне также нужно переопределить save_model для каждой расширенной модели:

class ExtendedThing(ManagerLogAdmin):
    # ...
    def save_model(self, request, obj, form, change):
        obj = manager_log_save_model(self, request, obj, form, change)
        # ... other stuff I need to do here

Ответы [ 2 ]

3 голосов
/ 27 марта 2014

более простой способ, используйте save_model

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

см .: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model

1 голос
/ 02 марта 2011

Думаю, вам стоит ознакомиться с разделом django для версий Все эти приложения будут отслеживать изменения в вашей модели, кто и когда внес эти изменения.

...