Skip to main content
 首页 » 编程设计

python之为什么表单 "save()"方法的签名应该与 django 中的基 Form 类匹配

2025年05月04日38kuangbin

例如,我有以下代码:

from django.db import models 
from django.forms import ModelForm 
from django.contrib.auth.models import User 
from django.views.generic import FormView 
 
 
class MyModel(models.Model) 
    owner = models.ForeignKey(User) 
    description = models.TextField() 
 
 
class MyForm(ModelForm): 
 
    class Meta: 
        model = MyModel 
 
    def save(self, owner, commit=True): 
        self.instance.owner = owner 
        return super().save(commit) 
 
 
class MyView(FormView): 
    success_url = '/' 
    form_class = MyForm 
    template_name = 'my_template.html' 
 
    def form_valid(self, form): 
        form.save(self.request.user) 
        return super().form_valid(form) 

如果我在该代码上运行 pylint,它会给出以下错误:

[W0221(arguments-differ), MyForm.save] Arguments number differs from overridden 'save' method 

这样做是不好的做法吗?我应该在 View form_valid 方法中设置 owner 吗?

请您参考如下方法:

查看文档:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

为什么不使用 commit=False 调用保存,而不是使用不同的签名;这将返回模型实例。然后您可以添加适当的属性,在本例中为所有者,并直接保存模型。