![](/img/trans.png)
[英]How can I calculate total value of actual total field and store this value in another field in model in odoo?
[英]How can I add an auto increment field in a model based on total count of objects with same field value?
我是整個 Django 的新手,有點迷茫。 抱歉,如果標題有點混亂,我會嘗試清除內容。
所以基本上我有兩個模型( Folder 和 Document )。 Document可以使用Foreign Key將單個Folder作為其字段之一。 現在我在Document中有另一個字段,需要獲取共享同一文件夾的Document 對象總數並增加一個。
我已經嘗試過我在文檔上閱讀的內容(聚合、F() 對象、覆蓋模型的 save() function )以及在此處閱讀了一些答案但未能正確理解,所以我發布了一些答案幫助。 下面是我的 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 中注冊了這兩個模型,僅此而已。 我在需要時創建新的文件夾對象,並每次保存帶有一個特定文件夾的文檔
我建議在文件夾中創建多對多關系,並將創建的文檔 object 添加到文件夾的多對多關系中。
模型.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()
.count()
中的文檔數量來添加可以添加到文件夾的文檔
多對多關系在這里有很好的記錄: https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/
當您創建文檔 model object 時,它表示單個項目。 該單個項目不應該計算文件中有多少文檔。 您記下的f_no
實際上應該在文件夾 model 中。
通過 ForeignKey 創建與文件夾 object 相關的文檔 object 后,您可以使用信號來遞增位於文件夾 object 中的f_no
字段。
@receiver(post_save, sender=Document)
def increment_folder_item_count(sender, **kwargs):
# get Folder object via Document model instance folder foreignkey field
# folder.f_no += 1
# folder.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.