我有这个个人资料资源:
class ProfileResource(resources.ModelResource):
email = fields.Field(attribute='email',
widget=CharWidget(),
column_name='email')
class Meta:
model = Profile
clean_model_instances = True
import_id_fields = ('email',)
在创建配置文件时,会验证电子邮件地址的有效性。这个功能运行良好,但当我将其用作外键时,如下所示:
class InvestmentResource(resources.ModelResource):
email = fields.Field(attribute='email',
widget=ForeignKeyWidget(Profile, field='email'),
column_name='email')
class Meta:
model = Investment
clean_model_instances = True
import_id_fields = ('id',)
def before_import_row(self, row, row_number=None, **kwargs):
self.email = row["email"]
self.profile__firstname = row["firstname"]
self.profile__lastname = row["lastname"]
def after_import_instance(self, instance, new, row_number=None, **kwargs):
"""
Create any missing Profile entries prior to importing rows.
"""
try:
profile, created = Profile.objects.get_or_create(email=self.email)
profile.firstname = self.profile__firstname
profile.lastname = self.profile__lastname
profile.save()
instance.profile = profile
except Exception as e:
print(e, file=sys.stderr)
现在不再验证电子邮件。我尝试为InvestmentResource
上的电子邮件添加两个小部件,ForeignKeyWidget
和CharWidget
,但没有起作用。
那么我该如何在InvestmentResource
内验证电子邮件?