【问题标题】:how can we update one to one relationship models db data from django?我们如何从 django 更新一对一的关系模型数据库数据?
【发布时间】:2021-07-09 15:00:08
【问题描述】:

我是 django 的新手,我使用 django 的内置用户模型创建了 onetoOneField 关系模型,但我不知道如何更新该模型类表值。 我的模型

class category(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    TYPES = [
        ("BASIC","BASIC"),
        ("PLUS","PLUS"),
        ("PRO","PRO")
    ]
    User_Type = models.CharField(max_length=40,choices=TYPES,default="BASIC")
    Product_Limit = models.IntegerField(default=0)
    Amount_Paid = models.IntegerField(default=0)

尝试了这两种情况,但出现了一些错误

#key = category.objects.update_or_create(id=request.user.id,User_Type= request.user.category.User_Type,Product_Limit=2,Amount_Paid=request.user.category.Amount_Paid)
 user = request.user.category.update_or_create(Product_Limit=10)

【问题讨论】:

  • 您可以添加您在每种情况下遇到的错误吗?
  • 你遇到了什么错误?
  • 将用图像编辑给我 1 分钟
  • 你现在可以检查一下吗?

标签: python mysql django django-models


【解决方案1】:

试试这个:

category = Category.objects.filter(user=request.user).update_or_create(
    user=user, Product_Limit=10
)

这将进行两个 SQL 查询:

  • 首先,Django 将创建一个SELECT ... FROM category WHERE user_id = ...。由于 categoryuser 具有一对一的关系,因此应该返回 0 或 1 行。
  • 如果第一个查询没有记录,Django 将使用user_id=request.user.idProduct_Limit=10 进行INSERT INTO category 查询,其他字段遵循默认值。
  • 如果第一个查询有记录,Django 将进行UPDATE category SET user_id = ..., Product_Limit = ... WHERE user_id = ... 查询以更新Product_Limit 字段。

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2016-07-22
    相关资源
    最近更新 更多