python - 如何根据具有相同字段值的对象总数在模型中添加自动增量字段?
问题描述
我是整个 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 中注册了这两个模型,仅此而已。我在需要时创建新的文件夹对象,并每次保存带有一个特定文件夹的文档
解决方案
我建议在文件夹中创建一个多对多关系,并将创建的 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/
推荐阅读
- google-analytics - 为什么我的跟踪链接 Source/Medium 显示为 EmailCampaign/email
- c - 如何正确检查调试器?
- r - 在 emacs ess 中编辑 R 函数时的变量范围
- ubuntu - 尝试使用 minikube 运行 kubectl get pods 时无法读取客户端证书和客户端密钥
- google-chrome - Chrome 扩展:何时需要 activeTab 权限
- reactjs - 材质UI核心多选
- javascript - 使用 javascript 和 php 在段落之间动态放置图像
- vim - 改变行为
在 VIM 中将光标移动到页面顶部 - sql - 每天时间范围内“可用性”的数据库表设计
- android - 如何在后台自动获取 JSON 对象