当虚拟数据存储在 Django 数据库中且其 id 为 none 且所有值为 null 时如何解决错误

Posted

技术标签:

【中文标题】当虚拟数据存储在 Django 数据库中且其 id 为 none 且所有值为 null 时如何解决错误【英文标题】:How to solve the error when dummy data gets stored in Django database with its id as none and all values as null 【发布时间】:2021-12-31 05:31:35 【问题描述】:

我在 Django 中制作了这个表单,它需要一些数据,当单击保存按钮时,它会将其保存到数据库中。它存储了我提供的数据,但我注意到每次刷新包含表单的页面时,它都会自动保存一个 Id 为 none 且所有值都设置为 null 的对象。我想知道如何编写一个函数,说明表单仅在单击保存提交按钮时提交到数据库,而不是在重新加载页面并在数据库中创建虚拟对象时提交。

【问题讨论】:

您还应该显示一些代码以获得更好的帮助。 【参考方案1】:

我认为这里的问题在于视图,更具体地说,是您如何处理视图内的请求。 无论请求方法是什么,您似乎都在保存对象,这就是为什么即使刷新页面也会保存一个新对象。

【讨论】:

哦,不,请求方法是 POST 基本上我说的是 request.POST.get = 输入的名称。然后我用模型字段分配字段的名称,然后说:name.save() 但所有这一切都只有在单击“保存”按钮时才会发生。所以我不明白它为什么要保存一个新对象 你能给我们看看代码吗?以便我们更好地帮助您【参考方案2】:

您必须在表单中添加 csrf_token!

如下例所示...

你写在文件html

<form method="post">
% csrf_token %
<input name="plan" id="id_plan" value="1">
<button>buy</button>
</form>

你写在models.py中

class Account(models.Model):
    user = models.OneToOneField(djangoUser, on_delete=models.CASCADE, verbose_name=_('User'))

你写在views.py中

class testviews(TemplateView):
model: Account
    def forms_valid(self, form):
            user = Account.objects.filter(user=self.request.user)
            user.save()

【讨论】:

是的,我做到了,但仍然无法正常工作 另外,您知道我如何将所有这些表单设置为当前用户吗?我的意思是我使用了 user = models.ForeignKey(User, on_delete=models.CASCADE, null=True);但是当一个对象上传到数据库时,我希望它自动成为上传对象的当前用户 你必须从views.py向每个用户设置一个请求 你得到结果了吗? 还没有,我会告诉你的。感谢您的帮助

以上是关于当虚拟数据存储在 Django 数据库中且其 id 为 none 且所有值为 null 时如何解决错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 获取特定的 id 数据(多个 id 存储在列表中)

如何在另一个类中获取一个类对象的 id 并存储在数据库中 - Django

浅析Django之session与cookie

ElastiCache for Redis 缓存策略

在 Django 模型中存储与外键关联的数据

如何在 Django 视图中访问本地存储中的数据?