簡體   English   中英

如何根據具有相同字段值的對象總數在 model 中添加自動增量字段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM