python - 表单注册为有效但不更新
问题描述
这是一个非常奇怪的现象。为什么即使表单有效,值也不会更新?如果我在 django admin 中执行它,它会起作用。我什至没有收到任何错误。该表格只是有效的,但它没有被更新。就好像他们采用旧值来更新......
html:
<form action="{% url 'account:displayinfo' request.user.id %}" method="POST" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<div class="d-flex justify-content-center">
<button type="submit" class="btn btn-primary btn-sm col-lg-5">Update</button>
</div>
</form>
视图.py
def display_information_view(request, *args, **kwargs):
user_id = kwargs.get("user_id")
account = Account.objects.get(pk=user_id)
context = {}
displayinfo = AccountDisplayInfo.objects.get(account=account)
if request.method == "POST":
form = DisplayInformationForm(request.POST, request.FILES, instance=request.user)
if form.is_valid():
info = form.save(commit=False)
info.account = request.user
info.save()
messages.success(request, 'Your profile display information have been updated', extra_tags='editdisplayinfo')
return redirect("account:view", user_id=account.pk)
else:
form = DisplayInformationForm(request.POST, instance=request.user,
initial={
"instagram": displayinfo.instagram,
}
)
context['form'] = form
else:
form = DisplayInformationForm(
initial={
"instagram": displayinfo.instagram,
}
)
context['form'] = form
return render(request, "account/displayinfo.html", context)
表格.py
class DisplayInformationForm(forms.ModelForm):
class Meta:
model = AccountDisplayInfo
fields = ('instagram',)
模型.py
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
class AccountDisplayInfo(models.Model):
account = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
instagram = models.CharField(max_length=50, unique=True, blank=True, null=True) #instagram
@receiver(post_save, sender=Account)
def create_AccountDisplayInfo(sender, instance, created, **kwargs):
if created:
AccountDisplayInfo.objects.create(account=instance)
解决方案
您将表单的实例设置为不正确的模型实例。查看您的表单,这是ModelForm
因为AccountDisplayInfo
您将实例传递为instance=request.user
. 将所有此类代码更改为instance=displayinfo
.
推荐阅读
- excel - 如何使用excel中结构化引用表的特定连续列在vba中设置范围?
- javascript - Google Cloud Speech-to-Text 无法在某些 iDevice 上正确转录流式音频
- list - 如何从列中提取值并将其作为浮动在 pyspark 中?
- r - 求和 R 中绘图的所有值
- php - 在 VS Code 中安装 Laravel 后出现 PHP“未定义”错误
- java - 出现错误 [taskdef] 无法从资源 org/apache/maven/resolver/ant/antlib.xml 加载定义
- node.js - nodemon没有在docker上重新启动
- java - 如何使像素半透明?
- python - 我对这个问题很感兴趣:“DataFrame 的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”
- excel - 使用 COUNTIF 和基于左侧单元格的文本