django - 如果没有选择图像,则获取用户的旧图像
问题描述
我有一个表单,它接收用户数据,如简历、个人资料图片、性别等,并在提交后创建有关用户的新行或更新现有行。这仅在用户上传图像时才有效。如果没有为个人资料图片上传图片,则不会提交表单。我怎样才能做到这一点,如果用户没有上传个人资料图片,那么它将保留用户以前的个人资料图片并仍然提交?
这是我的代码:
class ProfileSettings(UpdateView):
model = Profile
template_name = 'blog/settings.html'
form_class = ProfileForm
success_url = reverse_lazy('blog:settings')
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
bio = form.cleaned_data['bio']
gender = form.cleaned_data['gender']
avatar = form.cleaned_data['avatar']
Profile.objects.update_or_create(user=self.request.user, defaults={'avatar':avatar, 'bio':bio, 'gender':gender})
return HttpResponseRedirect(self.success_url)
解决方案
我会给你快速和肮脏的 - 3个地方来解决这个问题:
- Javascript - 让表单知道需要哪些字段并在用户名已经存在时预先填写(超出您问题的范围,但只是把它扔在那里)
- 在 API 端点中(这似乎是您要采用的方法)
- 在您的模型中(实现一个自定义保存功能,查看是否新的,并将初始值与后续值进行比较)
我将转储选项 1 和 3,因为它们与您提出的问题无关。我假设用户在每个配置文件中都是唯一的。而且我假设当前需要字段头像。如果您将其设置为不需要,则表单帖子应允许头像为空值 -如何使 django 中的 FileField 为可选?. 您可能在想,但我不希望该字段可能为空白 - 您始终可以强制在第一次发布帖子时通过 API 端点本身设置该字段。如果您将该字段设为可选,则表单将发布,但您可能希望通过实际检查对象是否已存在来更明确地使用 .update_or_create ,如果存在则需要该字段,或者如果不确认该字段已设置。
推荐阅读
- javascript - 如何关闭当前浏览器窗口?
- android - 如何通过 Espresso 检查拨号器上的电话号码 - 通过 autoLink 触发的拨号器
- python - 如何将 2 个字符串 a、b 连接到 C,然后仅使用 C 检索 a、b 的值。对 a 和 b 的输入没有限制
- intellij-idea - IntelliJ IDEA JUnit5 标签运行配置错误模块未指定
- sql - MS Access VBA/SQL - 从 3 个表中选择不同的匹配记录并更新单个列
- javascript - Replace a line in txt file using JavaScript
- r - Lapply 和 for 循环在动态创建图形时产生不同的结果
- r - R converting FB json friend list to data frame
- java - 如何在 TEXTVIEW 中捕获 JSON 响应?
- google-sheets - Changing formula (with consecutive relative references) into an array formula so it will work with google forms input