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
Run Code Online (Sandbox Code Playgroud)
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})
Run Code Online (Sandbox Code Playgroud)
小智 5
在这种情况下,调用super.method调用method父类的方法ModelForm.在这种情况下这是必要的,因为Django模型和表单在__init__方法中发生了各种奇怪的事情,如果你不调用super().__init__()那些将不会发生,并且对象将不会按预期运行.
另外作为旁注,这是python 2中的无效语法(但在python 3中完全有效且正确).你必须写作super(DuckForm, self).__init__才能达到同样的目标.
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |