Установить текущего администратора как пользователя для сохранения в БД под Django Admin TabularInline - PullRequest
0 голосов
/ 05 июля 2018

У меня есть TabularInline под моей страницей администратора, и я хочу запретить администраторам редактировать поле submit_user, сделав его доступным только для чтения.

Однако при создании новых записей в базе данных мне нужно иметь возможность передать текущего пользователя как submit_user

Я прочитал много сообщений о stackoverflow, но ни один из них не работает для меня. Многие предлагали save_formset, но это просто не работает для меня. БД всегда жалуется на отсутствие поля submit_user (если в этом случае столбец имеет ForeignKey, который сопоставляется с другой таблицей User, и жалоба касается user_id. Мысль, что пользовательский объект должен быть в порядке, но это не так не похоже, что это так.)

моя модель выглядит как

class SomeTable(model.Model):
    submit_user = models.ForeignKey(User, db_column='user')
    data1 = models.CharField(max_length=200)
    create_date = models.DateTimeField(null=False, default=datetime.datetime.now)

1 Ответ

0 голосов
/ 05 июля 2018

Так что я как-то обманул, но решил свою проблему. Поскольку таблица запрашивает идентификатор вместо объекта пользователя, вместо этого я передаю request.user.id.

Вот как это выглядит

instances = formset.save(commit=False)
for i in instances:
    i.submit_user_id = request.user.id
    i.save()
formset.save_m2m()

РЕДАКТИРОВАТЬ 1:

Это окончательный вариант моего ответа. Я мог бы успешно добавить и удалить запись с этим переписать save_formset

def save_formset(self, request, form, formset, change):
    instances = formset.save(commit=False)
    for i in instances:
        if hasattr(i, 'submit_user_id') and not i.submit_user_id:
            i.submit_user_id = request.user.id
        i.save()

    formset.save_m2m()
    super(SomeModelAdmin, self).save_formset(request, form, formset, change)
...