首页 > 解决方案 > 如何根据具有相同字段值的对象总数在模型中添加自动增量字段?

问题描述

我是整个 Django 的新手,有点迷茫。抱歉,如果标题有点混乱,我会尝试清除内容。

所以基本上我有两个模型(Folder 和 Document)。Document可以使用Foreign Key将单个Folder作为其字段之一。现在我在Document中有另一个字段,需要获取共享同一文件夹的Document 对象总数并增加一个。

我已经尝试了我在文档上阅读的内容(聚合、F() 对象、覆盖模型的 save() 函数)以及在此处阅读了一些答案,但未能正确解决,所以我发布以获取一些帮助。下面是我的 models.py 文件,其中包含两个模型和一些注释,以便更好地理解。

class Folder(models.Model):
    category = models.IntegerField()
    subCategory = models.IntegerField()
    name = models.CharField(max_length= 50)
    desc = models.TextField()

class Document(models.Model):
    folder = models.ForeignKey(Folder, on_delete=models.CASCADE)
    date_created = models.DateField()
    date_added = models.DateTimeField()

    #The field below needs to sum all Document objects that share 
    #the same folder value in the database + 1 and set it as its default value
    f_no = models.IntegerField(default=lambda: Document.objects.aggegate(Count('folder')) + 1)

提前谢谢您,欢迎提供任何线索或线索

编辑: 忘了说所有管理都是通过 Django 的管理仪表板完成的,如果这与我的情况有任何关系的话。我在 admin.py 中注册了这两个模型,仅此而已。我在需要时创建新的文件夹对象,并每次保存带有一个特定文件夹的文档

标签: pythondjangomariadb

解决方案


我建议在文件夹中创建一个多对多关系,并将创建的 Document 对象添加到文件夹的多对多关系中。

模型.py

class Folder(models.Model):
    category = models.IntegerField()
    subCategory = models.IntegerField()
    name = models.CharField(max_length= 50)
    desc = models.TextField()
    documents = models.ManyToManyField('app.Document')

.add()您可以使用ManyToMany关系和关系中的文档数量添加可以将文档添加到文件夹中.count()

多对多关系在这里有很好的记录: https ://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/


推荐阅读