如何根据另一条记录生成动态模型记录

How to generate a dynamic model record based on another record

我有一个简单的模型:

class Team(models.Model):
    team_member_phone = models.CharField(max_length=128, default='',)
    team_member_phone_clean = models.CharField(max_length=128, default='',)

还有一个简单的表格:

class TeamAddForm(forms.ModelForm):
      class Meta:
            model = Team
            fields = ( 'team_member_phone')

用户能够以 +44 123 123 123 格式输入他们的 phone。

如何从 team_member_phone 中去除任何非数字字符(例如空格和 +)并将结果存储在 team_member_phone_clean 中?

我是否需要在通过 views.py 提交表单时执行此操作,或者我是否可以将其编写为模型的一部分(这样更好),以便动态生成(即自动更新) ?

注意,我想要两个版本,这样我可以在再次编辑数字时表示 "user friendly" 空白格式。

我会在模型的存档中这样做:

import re

class Team(models.Model):
    team_member_phone = models.CharField(max_length=128, default='',)
    team_member_phone_clean = models.CharField(max_length=128, default='',)

    def set_member_phone_clean(self):
        self.team_member_phone_clean = re.sub(r"(\s)|([^\d])", "", self.team_member_phone)

    def save(self, *args, **kwargs):
        self.set_member_phone_clean()
        super(Team, self).save(*args, **kwargs)

是的,你必须在你的表单 TeamAddForm 中定义它,当你检查 form.is_valid() 时它会自动调用,前提是你已经覆盖了表单的清理方法

def clean(self):
    cleaned_data = super(TeamAddForm, self).clean()
    # do your processing here with self.fields['team_member_phone'] and return back the data
    return cleaned_data