这是模型
class UserInfoModel(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, default=1, unique=True)
web_site = models.URLField(max_length=200, null=True, blank=True)
biography = models.TextField(null=True, blank=True)
profile_pic = models.ImageField(
upload_to=upload_location,
null=True,
blank=True,
height_field='height_field',
width_field='width_field',
)
height_field = models.IntegerField(default=0, null=True, blank=True)
width_field = models.IntegerField(default=0, null=True, blank=True)
这是观点
# my info
try:
my_image = cache.get(request.user, None)
if not my_image:
my_image = UserInfoModel.objects.get(user=request.user)
cache.set(request.user, my_image, None)
except:
my_image = None
try:
info_user = my_image
initial_data = {
'web_site': info_user.web_site,
'biography': info_user.biography,
}
info = UserInfoForm(request.POST or None, instance=info_user, initial=initial_data)
except:
info = UserInfoForm(request.POST or None)
if info.is_valid():
new_info = info.save(commit=False)
new_info.user = request.user
new_info.save()
return redirect('/index/')
在代码上方,如果有初始数据,那么我在页面中显示数据然后我们可以根据需要进行更改,并且初始数据非常精细
# my info
try:
my_image = cache.get(request.user, None)
if not my_image:
my_image = UserInfoModel.objects.get(user=request.user)
cache.set(request.user, my_image, None)
except:
my_image = None
try:
info_user = my_image
initial_data = {
'web_site': info_user.web_site,
'biography': info_user.biography,
}
user_form = UserInfoForm(request.POST or None, request.FILES or None, instance=info_user, initial=initial_data)
except:
user_form = UserInfoForm(request.POST or None, request.FILES or None)
if user_form.is_valid():
form = user_form.save(commit=False)
form.user = request.user
form.save()
return redirect('/'+str(request.user.username)+'/')
但在代码之上,如果我在模型中保存任何图像,那么所有类型的文本字段都消失了
在模型中我有1个图像字段2文本字段,但是文本字段和图像字段保留在不同的页面但不会出错,因为textfields和image字段为null true true true,在文本字段的页面中如果我保存,那么即使图像字段有图像也保存了所有内容然后图像没有消失,但是在图像字段页面中如果我保存图像则所有文本字段都消失了,为什么会发生
===========解决方案=============
Okey这让我感到困惑,因为每个保存方法,更新方法都是这样的,但是如果你有一个模型,这个模型有图像和文本,那么如果你想从不同的页面更新图像和文本,问题来自在HTML文档里面,因为当你输入enctype =' multipart / data'那么html文档不会渲染我们在视图中指定的任何初始数据,但如果你在其他页面中更新文本,一切都很好,只是工作正常。因此,解决方案是,如果您喜欢该项目,那么使用单独的模型,这将工作,有一个美好的一天。