如何在视图中访问Django模型字段?

2024-04-20 10:06:02 发布

您现在位置:Python中文网/ 问答频道 /正文

所以基本上我有一个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)

这是我试图弄明白的逻辑,但打印(x)返回“<;QuerySet[<;Search:Shirts>;]”; “。我如何访问此表单中的频率字段以便更新它


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
    )

您只需在此处使用^{}

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)

我相信您可以直接循环,这将类似于:

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

相关问题 更多 >