python - 根据单词重复增加模型整数字段

标签 python django string forms models

假设我有两个模型,一个 Box 模型和一个 Thing 模型。最后一个将 Box 作为外键。每个 Box 都用作用户可以使用 ModelForm 添加的字符串对象的容器。 models.py 应该是这样的:

models.py

class Box(models.Model):
name = models.CharField(max_length=120, unique=True)

def __str__(self):
    return self.name

class Things(models.Model):
    box = models.ForeignKey(Box)
    name = models.CharField(max_length=120)
    thing_number = models.PositiveIntegerField(default=1)

    def __str__(self):
        return self.name

现在,每次用户在表单中插入相同的字符串时,我都想将“thing_number”整数字段增加 1。有没有简单的方法可以做到这一点?

最佳答案

我认为您应该将 Thing 的字段 thing_number 默认为零。 如果您这样做,那么您可以将事物数量增加

thing, created = Things.objects.get_or_create(box=your_box, name=thing_name)
thing.things_number += 1
thing.save()

其他情况:

thing, created = Things.objects.get_or_create(box=your_box, name=thing_name,
                                              default={'thing_number':0})
thing.things_number += 1
thing.save()

----额外

正如@e4c5所说,上面的代码可能会导致竞争条件,那么代码可以这样更改:

Things.objects.get_or_create(box=your_box, name=thing_name, default={'thing_number':0})
Things.objects.filter(box=your_box, name=thing_name).update(thing_number=F('thing_number') + 1)

关于python - 根据单词重复增加模型整数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42715203/

相关文章:

Django CSRF Coo​​kie——为什么浏览器关闭时它不会过期?

python - Django 覆盖 bulk_create

python - 有权在 Django 管理中仅修改模型的一个字段的用户

java - 我可以向 String 类添加新方法吗?

python - SQLalchemy 查询中的正则表达式?

python - pandas 内存消耗 hdf 文件分组

c - 未格式化的 C 文件输入/输出

c - 即使我在 C 程序中给出不同的输入,也能获得相同的输出

python - 我应该使用正则表达式来获取文件名吗?

python - 如何适应文档?