Назначить request.user при сохранении формы столкновения с админкой? - PullRequest
0 голосов
/ 12 января 2020

У меня есть набор форм, который я пытаюсь сохранить, и я хотел бы, чтобы вновь созданная форма была автоматически назначена пользователю (request.user). В моих моделях Meta class я добавил это:

forms.py

class Meta:
    model = Timesheet
    # fields = "__all__"
    exclude = ("user", )

, а затем в views.py

class TimesheetCreateView(View):
    object = None

    def post(self, request, *args, **kwargs):
        form = TimesheetModelForm(request.POST)

        if form.is_valid():
            self.object = form.save(commit=False)
            self.object.user = request.user
            self.object.save()
            success_url = reverse("timesheets:current-week", args=(self.object.year, self.object.week))
        else:
            # Warning: Silent form error
            print(form.errors)
            success_url = reverse("timesheets:default-current-week")

        return HttpResponseRedirect(success_url)

Это работает нормально, однако - если Я теперь go в админ-панели - выпадающее поле для пользователя (внешний ключ) также исчезло. Есть ли показать все поля в админке, но автоматически использовать request.user в шаблоне? Я попытался использовать fields = "__all" и использовать те же логи c в моем файле views.py, но я получаю сообщение об ошибке формы, кричащее «требуется пользователь» - я не хочу, чтобы у пользователя было выпадающее меню, показывающее все доступные пользователи.

Если я добавлю это в forms.py

def __init__(self, user, *args, **kwargs):
    super(TimesheetModelForm, self).__init__(*args, **kwargs)
    self.fields['user'].queryset = User.objects.filter(id=user.id)  # show logged in user in dropdown

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

...