Wrt到下面的代码段,为什么模型中使用了super().__init__
?它是如何工作的?
model.py
class DuckForm(forms.ModelForm):
class Meta:
model = Duck
fields = ('description', 'name')
def __init__(self, community, *args, **kwargs):
super().__init__(*args, **kwargs)
self.community = community
def save(self, commit=True):
duck = super().save(commit=False)
if not duck.community_id:
duck.community = self.community
if commit:
duck.save()
return duck
views.py
def add_duck(request):
if request.method == 'POST':
form = DuckForm(request.animal.community, data=request.POST)
if form.is_valid():
duck = form.save()
return redirect('DuckData')
else:
form = DuckForm(request.user.community)
return TemplateResponse(request, 'MyDuck.html', {'form': form})
答案 0 :(得分:5)
调用super.method
调用父类的method
方法,在本例中为ModelForm
。在这种情况下这是必要的,因为Django模型和表单在__init__
方法中发生了各种奇怪的事情,如果你不调用super().__init__()
那些就不会发生这种情况和对象将不会按预期行事。
另外作为旁注,这是python 2中的无效语法(但在python 3中完全有效且正确)。你必须写super(DuckForm, self).__init__
来实现同样的目标。