我跟隨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
太好了。非常感謝。 –