如何重写 modelform 类的 save() 方法并添加缺失的信息?

发布于 2024-10-08 16:58:50 字数 1284 浏览 3 评论 0原文

我刚开始学习Django,我有一个问题。

我试图在保存表单数据时自动添加缺少的信息。我可以通过重写 modelform 类的 save() 方法来更改/添加所需的“cleaned_data”信息,但更改不会记录在数据库中。其实修改后的信息怎么写呢?这是代码:

def save(self, commit = True, *args, **kwargs):
    temp = ServiceMethods(url = self.cleaned_data.get('url'), wsdl_url = self.cleaned_data.get('wsdl_url'))

    if not temp.get_wsdl_url():                             
        temp.make_wsdl_url()

    if temp.get_wsdl_url():                                 
        temp.make_wsdl()                                    
        self.cleaned_data['wsdl_url'] = temp.get_wsdl_url() 
        self.cleaned_data['wsdl_description'] = temp.get_wsdl_description()

    super(ServiceForm, self).save(commit = commit, *args, **kwargs)  

型号:

class Services(models.Model):
    name                = models.CharField('Имя', max_length=256)
    url                 = models.URLField('Ссылка', unique = True)
    wsdl_url            = models.URLField('Ссылка на WSDL-документ', blank=True)
    description         = models.TextField('Описание сервиса',blank=True)
    wsdl_description    = models.TextField('WSDL описание', blank=True, editable=False)
    added               = models.DateTimeField('Добавлено', auto_now_add=True)

TIA

I just started to learn Django and I had a question.

I'm trying to automatically add the missing information, when saving form data. I get to change/add the desired "cleaned_data" information by overriding save() method of modelform class, but changes are not recorded in the database. Actually, how to write the modified information? This is code:

def save(self, commit = True, *args, **kwargs):
    temp = ServiceMethods(url = self.cleaned_data.get('url'), wsdl_url = self.cleaned_data.get('wsdl_url'))

    if not temp.get_wsdl_url():                             
        temp.make_wsdl_url()

    if temp.get_wsdl_url():                                 
        temp.make_wsdl()                                    
        self.cleaned_data['wsdl_url'] = temp.get_wsdl_url() 
        self.cleaned_data['wsdl_description'] = temp.get_wsdl_description()

    super(ServiceForm, self).save(commit = commit, *args, **kwargs)  

And model:

class Services(models.Model):
    name                = models.CharField('Имя', max_length=256)
    url                 = models.URLField('Ссылка', unique = True)
    wsdl_url            = models.URLField('Ссылка на WSDL-документ', blank=True)
    description         = models.TextField('Описание сервиса',blank=True)
    wsdl_description    = models.TextField('WSDL описание', blank=True, editable=False)
    added               = models.DateTimeField('Добавлено', auto_now_add=True)

TIA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子的影子 2024-10-15 16:58:50

尝试在 self.instance 上设置数据,而不是在 self.cleaned_data 中,并让我知道这是否有效。

Try setting the data on self.instance instead of in self.cleaned_data, and let me know if that works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文