Администратор Django - как сохранить inlines? - PullRequest
5 голосов
/ 09 августа 2011

Мне нужно переопределить метод сохранения inlines в админке.При сохранении фотографий мне нужно добавить идентификатор пользователя в колонку БД.Я не могу сделать это в модели, потому что там нет данных запроса.Как я могу сделать это в админке, чтобы как-то получить nad set id пользователя?

Ответы [ 2 ]

13 голосов
/ 09 августа 2011

Я считаю, что вам следует использовать метод save_formset в ModelAdmin:

class ArticleAdmin(admin.ModelAdmin):
    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            instance.user = request.user
            instance.save()
        formset.save_m2m()

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_formset

0 голосов
/ 03 августа 2016

Я относительно новичок в django (1.8) и использую вышеуказанное переопределение:

    def save_formset(self, request, form, formset, change):
    instances = formset.save(commit=False) # gets instance from memory and add to it before saving it
    for obj in formset.deleted_objects:
        obj.delete()
    for instance in instances:
        for form in formset: # cleaned_data is only available on the form, so you have to iterate over formset
            instance.modified_by = request.user
            instance.created_by = request.user
            instance.lowercase_enum_value_en = form.cleaned_data['enum_value_en'].lower()
            instance.save()
    formset.save_m2m()

т.е. добавление к нему перед сохранением экземпляра и формы, однако, когда пользователь вводит 2 строки, он всегда сохраняетпоследние очищенные данные ['enum_value_en'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...