Добрый день. Сразу к коду.
Швыряет: init() got an unexpected keyword argument 'instance'
На вызов конструктора BaseModelFormSet. Швыряет, когда заходу в редактирование или добавление объекта в админке. Переопрелял init, явно вызывал у родителя, ничего не изменилось.
Доку читал, смотрел django код, но не так и не понял что не так.
django 1.10
python: 3.4.3
models.py
class Question(models.Model):
question = models.TextField("Вопрос:")
def __str__(self):
return self.question
class Answers(models.Model):
question = models.ForeignKey(Question, verbose_name="Вопрос: ")
answer = models.CharField("Ответ:", max_length=250)
correctly = models.BooleanField("Правильный ответ", default=False)
def __str__(self):
return self.answer
forms.py
from django import forms
from django.forms.models import BaseModelFormSet
class BaseCreateAnswersFormset(BaseModelFormSet):
def clean(self):
"""Checks that no two answers have the same title."""
if any(self.errors):
return
# super(BaseCreateAnswersFormset, self).clean()
currently = False
answers = []
for form in self.forms:
answer = form.cleaned_data['answer']
if answer in answers:
raise forms.ValidationError("Answers must be different.")
if form.cleaned_data['correctly']:
currently = True
answers.append(answer)
if not currently:
raise forms.ValidationError("At least one answer must be correct.")
admin.py
from django.contrib import admin
from django.forms.models import modelformset_factory
from .models import Question, Answers
from .forms import BaseCreateAnswersFormset
class AnswerInline(admin.StackedInline):
model = Answers
extra = 3
max_num = 3
formset = modelformset_factory(model=Answers,
fields="__all__",
formset=BaseCreateAnswersFormset)
class QuestionAdmin(admin.ModelAdmin):
inlines = [AnswerInline]
admin.site.register(Question, QuestionAdmin)
Updated 14 Sept. 2016, 14:04 by neoliz.