Допустим, у нас есть эта модель:
class Creation(models.Model):
title = models.CharField(max_length=DEFAULT_LENGTH)
url = models.CharField(max_length=DEFAULT_LENGTH)
date = models.DateTimeField('date published', default=datetime.date.today)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
def __str__(self):
return self.title
И давайте использовать это представление:
def submit(request):
FormSet = modelformset_factory(Creation, fields=('title', 'url'))
if request.method == 'POST':
formset = FormSet(request.POST, request.FILES)
if formset.is_valid():
obj = formset.save(commit=False)
obj.author = request.user
obj.save()
else:
formset = FormSet
return render(request, 'app/submit.html', {'formset': formset})
I сохранено formset
до obj
и добавил request.user
и зафиксировал его в базе данных. Это не работает, потому что теперь django выдает ошибку, которая говорит, что
объект 'list' не имеет атрибута 'author'
, что вполне логично, потому что в списке полей нет author
. Но , если я добавлю 'author' к fields
, при отображении шаблона с помощью {{formset}}
будет отображаться еще одно окно выбора. Возможно, я мог бы написать свой собственный шаблон-код вместо использования {{formset}}
и опустить автора, но я чувствую, что с Django3.0 должен быть более элегантный способ. Есть ли что-нибудь?
Все, что я хочу сделать, это заполнить посторонний ключ author
(см. Модель выше) зарегистрированным пользователем.