【问题标题】:How to update Django model data如何更新 Django 模型数据
【发布时间】:2021-09-10 02:21:30
【问题描述】:

我想知道如何将数据添加到代码中ins.save 之后的 Django 整数字段。例如,如果捐赠字段等于3,在ins.save之后,我想给它加1,因此它等于4。我的代码在下面。


捐赠观点:

def donate(request):
    if request.method == "POST":
        title = request.POST['donationtitle']
        phonenumber = request.POST['phonenumber']
        category = request.POST['category']
        quantity = request.POST['quantity']
        location = request.POST['location']
        description = request.POST['description']
        ins = Donation(title = title, phonenumber = phonenumber, category = category, quantity = quantity, location = location, description = description, user=request.user, )
        ins.save()
    

return render(request,'donate.html')

【问题讨论】:

  • 你不需要那个字段,你可以简单地查询来计算那个数字。
  • 我该怎么做?
  • 你能展示一下你的Donation 模特吗?
  • 是的,更新我的问题
  • 更新,捐赠模型从 HTML 表单中获取数据,提交数据后,我想将数据添加到 UserDetail 模型中。

标签: python html css django django-models


【解决方案1】:

你可以试试这个。

from django.db.models import F
......
ins.save()
UserDetail.objects.filter(user=request.user).update(donations=F('donations') + 1)

这将使request.user的捐款在ins.save()之后增加1

此外,在 UserDetail 模型中,将 IntegerField 的默认值设置为零,而不是可为空的捐赠字段

class UserDetail(models.Model):
    donations = models.IntegerField(default=0)

【讨论】:

  • 非常感谢您的回答,代码有效。只是想知道,我应该把默认捐赠的东西放在哪里?
  • @boetia 在您的 UserDetail 模型中。答案已更新。
【解决方案2】:

您实际上不需要donations 字段来计算用户的捐赠数量,因为它可以通过使用Count aggregation function [Django docs] 的查询来完成。例如,以下查询将为您提供所有用户及其捐赠计数:

from django.db.models import Count


# Assuming 'User' is your user model name
users = User.objects.annotate(donation_count=Count('donation'))

for user in users:
    print(user.username, user.donation_count)

# If we already have a user instance
donation_count = user.donation_set.count()

进一步移动 UserDetail 似乎是一个包含有关用户的额外详细信息的模型,但它有一个问题是您使用的是外键,而不是您应该使用 OneToOneField [Django docs],如果您想要 donations 在此模型中,您可以添加一个属性,以便对该模型进行查询:

class UserDetail(models.Model):
    points = models.IntegerField(blank=True, null = True,)
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    ) # A user detail without a user doesn't make much sense, hence no null or blank allowed
    
    @property
    def donations(self):
        return self.user.donation_set.count()

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2021-04-06
    • 2020-11-05
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多