我跟随Beginning Django E-Commerce,但我发现有关用户配置文件的部分有点令人困惑。基本上,我有一个抽象类是这样的:Django用户配置文件中的必填字段
class BaseOrderInfo(models.Model):
class Meta:
abstract = True
# a bunch of fields follow
shipping_name = models.CharField()
# etc
此之后,用户配置类继承BaseOrderInfo:
class UserProfile(BaseOrderInfo):
user = models.ForeignKey(User, unique = True)
# Possibly other methods or fields here
最后,有一个检索方法,正如它的名字所暗示的,检索用户配置文件(如果该用户配置文件不存在,它会创建一个针对该用户对象):
def retrieve(request):
try:
profile = request.user.get_profile()
except UserProfile.DoesNotExist:
profile = UserProfile(user=request.user)
profile.save()
return profile
好吧,我的问题是:怎么可能保存该用户配置instanc e在检索方法中,只需添加一个User实例,因为UserProfile从BaseOrderInfo类继承了相当多的其他字段?据我所知,Model和ModelForm默认创建必需的字段。
感谢
哦,现在我明白了。 save()不会调用full_clean()。但是,https://docs.djangoproject。com/en/dev/ref/models/instances /#当你保存时发生什么 - 描述了保存的过程,并指出了4和5看起来应该在将SQL语句插入数据库之前进行验证。你能澄清那部分吗? –
预处理和准备与验证不同,尽管它们可能引发验证错误,例如@Chris建议将'datetime'空。当'UserProfile'实例中的CharField被要求为数据库准备值时,它会返回默认的'u'“'。它没有被要求验证价值。 – Alasdair
太好了。非常感谢。 –