如何根据另一条记录生成动态模型记录
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
我有一个简单的模型:
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