Как предварительно заполнить поля , исключая в ModelFormSet. Приведенный ниже AuthorFormSet не принимает аргумент instance , только набор запросов. Итак, как мне заставить входящие пустые формы не иметь атрибут NULL / None user . Я хочу иметь возможность установить это пользовательское поле на request.user
models.py
class Author(models.Model):
user = models.ForeignKey(User, related_name='author')
# assume some other fields here, but not relevant to the discussion.
forms.py
class AuthorForm(forms.ModelForm):
class Meta:
model = Author
class BaseAuthorFormSet(BaseModelFormSet):
"""will do some clean() here"""
pass
AuthorFormSet = modelformset_factory(Author,\
form=AuthorForm, \
formset=BaseAuthorFormSet, extra=1,\
exclude=('user',)
)
views.py
def my_view(request):
if request.method == 'POST':
formset = AuthorFormSet(request.POST)
if form.is_valid():
form.save() # This will cause problems
# for the empty form i added,
# since user can't be null.
EDIT
Это то, что я закончил делать, на мой взгляд. Ответ Вогана частично верен, я думаю, что он пропускает итерации по всем формам.
for form in formset.forms:
form.instance.user = request.user
formset.save()