[英]super function in Python
下面的代碼片段為何在模型中使用super().__init__
? 它是如何工作的?
模型
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})
調用super.method
調用父類的method
,在本例中為ModelForm
。 在這種情況下這是必要的,因為Django模型和形式在__init__
方法中會發生各種奇怪的事情,並且如果您不調用super().__init__()
這些將不會發生,並且對象將不會發生。表現不出所料。
另外請注意,這是python 2中的無效語法(但在python 3中完全有效且正確)。 您必須編寫super(DuckForm, self).__init__
才能實現相同的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.