【问题标题】:How to access a django model field in views?如何访问视图中的 django 模型字段?
【发布时间】:2020-11-09 08:12:12
【问题描述】:

所以基本上我有一个 django 模型,它有一个我想在我的 views.py 文件中访问的频率字段,以便我可以更新它。

class Search(models.Model):
   Search_value = models.CharField(max_length=100, null=True)
   Search_User = models.CharField(max_length=200, default=None, null=True, blank=True)
   Frequency = models.IntegerField(null=True, blank=True)
   date_added = models.DateTimeField(default=timezone.now)

我正在尝试将频率场增加 1,而不是创建一个新对象。

        if models.Search.objects.filter(Search_value=search, Search_User=user):
           x = models.Search.objects.filter(Search_value=search, Search_User=user)
           print(x)
        else:
           models.Search.objects.create(Search_value=search, Search_User=user, Frequency=1)

这是我用来尝试弄清楚的逻辑,但 print(x) 返回 "]> "。如何访问此表单中的频率字段以便更新它。

【问题讨论】:

    标签: python django database django-models django-views


    【解决方案1】:

    我相信你可以直接循环,这将是这样的:

    x = models.Search.objects.filter(Search_value=search, Search_User=user)
    for obj in x:
        obj.Frequency += 1
    

    【讨论】:

      【解决方案2】:

      您可以在这里简单地使用.update()

      from django.db.models import F
      
      #...
      if models.Search.objects.filter(Search_value=search, Search_User=user).exists():
         models.Search.objects.filter(Search_value=search, Search_User=user).update(Frequency=F('Frequency')+1)
      else:
         models.Search.objects.create(Search_value=search, Search_User=user, Frequency=1)
      

      【讨论】:

        【解决方案3】:

        您可以执行此操作的最少查询是两个。一个update查询,返回更新的行数,如果行数为零则创建一个条目

        existing = models.Search.objects.filter(
            Search_value=search,
            Search_User=user
        ).update(
            Frequency=F('Frequency') + 1
        )
        if not existing
            models.Search.objects.create(
                Search_value=search,
                Search_User=user,
                Frequency=1
            )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-28
          • 2017-12-15
          • 2010-12-11
          • 2022-11-14
          • 2020-03-03
          • 2013-03-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多