首页 > 解决方案 > 从 django 管理表单插入时如何从另一列设置列的值

问题描述

我有存货表格,它有两列表示存货价值:当前存货,第一次插入时存货,当前存货和存货应该相同,但是,当借书时,当前存货应该减少, stock 列将是第一个值:例如: book1 有 stock 5 和 current stock 5,有人借了 book1,所以 book1 有 stock 5 和 current stock 4,

我不想从数据库触发器中执行此操作,因为我的应用程序是独立于数据库的。

请帮助我如何从 django 管理表单中做到这一点?

模型.py:

class BooksCopy(models.Model):
    book = models.ForeignKey(Book, on_delete=models.PROTECT)
    branch = models.ForeignKey(Branch, on_delete=models.PROTECT)
    no_of_copies = models.IntegerField('Stock')
    current_no_of_copies = models.IntegerField('Current Stock')

管理员.py:

class BooksCopiesAdmin(admin.ModelAdmin):
    models.BooksCopy.current_no_of_copies = models.BooksCopy.no_of_copies
    exclude = ('current_no_of_copies',)
    list_display = ('branch', 'book', 'no_of_copies', 'current_no_of_copies',)

标签: djangopython-3.x

解决方案


我想你有一些班级持有借来的书以及由哪个用户。就像是

class BorrowedBooks(models.Model)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)

你现在可以

class BooksCopy(models.Model):
    book = models.ForeignKey(Book, on_delete=models.PROTECT)
    branch = models.ForeignKey(Branch, on_delete=models.PROTECT)
    no_of_copies = models.IntegerField('Stock')

    @property
    def current_no_of_copies (self):
        return self.no_of_copies - self.borrowedbooks_set.all()

推荐阅读