【问题标题】:How to delete products from inventory in Django?如何从 Django 的库存中删除产品?
【发布时间】:2019-01-21 23:53:09
【问题描述】:

我想要什么:
我有名为 BookIssue 的模型类。在 Book 中,有一个名为 quantity 的字段,用于定义有多少本书。

当管理员向学生发放一本书时,会有一个数量为-1。我该如何实现这一点。
N.B:我想在 Django Admin Dashboard

中实现这一点
from django.db import models
from datetime import date, timedelta, datetime

# Create your models here.

class User(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    depertment_name = models.CharField(max_length=30)
    roll_number = models.CharField(max_length=10, primary_key=True)
    semester = models.CharField(max_length=10)

    def __str__(self):
        return self.depertment_name.upper() + ', ' + self.roll_number + ', ' + self.first_name.upper()


class Book(models.Model):
    name = models.CharField(max_length=30)
    author_name = models.CharField(max_length=30)
    category = models.CharField(max_length=30)
    quantity = models.IntegerField()

    def __str__(self):
        return self.name

class Issue(models.Model):
    issue_id = models.CharField(max_length=10)
    roll = models.ForeignKey(User, on_delete=models.CASCADE)
    book_name = models.ForeignKey(Book, on_delete=models.CASCADE)
    issue_date = models.DateField(auto_now=False, auto_now_add=True)


    def return_date(self):
        return datetime.now()+timedelta(days=3)

    def fine(self):
        return_date = datetime.now() + timedelta(days=3)
        if datetime.now() > return_date:
            return 'Fine'
        else:
            return 'No Fine'



更新:实施已解决。需要显示结果
请看这里


ADMIN.PY 代码

from django.contrib import admin
from django.contrib.auth.models import Group
from .models import User, Book, Issue

admin.site.site_header = 'Library Management System'

class UserAdmin(admin.ModelAdmin):
    list_display = ('roll_number', 'first_name', 'last_name', 'depertment_name')
    list_filter = ('depertment_name', 'semester')
    search_fields = ('roll_number', 'first_name')


class BookAdmin(admin.ModelAdmin):
    list_display = ('name', 'author_name', 'remaining', 'category')
    list_filter = ('category', 'author_name')
    search_fields = ('name', 'author_name')


class IssueAdmin(admin.ModelAdmin):
    list_display = ('issue_id', 'issue_date', 'return_date', 'fine', 'save')
    list_filter = ('issue_date',)
    search_fields = ('issue_id',)


admin.site.register(User, UserAdmin)
admin.site.register(Book, BookAdmin)
admin.site.register(Issue, IssueAdmin)
admin.site.unregister(Group,)

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    我认为,覆盖 Issue 模型的 save() 方法可以解决问题,

    class Issue(models.Model):
        # your code
        def save(self, *args, **kwargs):
            if not self.pk:
                super().save(*args, **kwargs)
                self.book_name.quantity -= 1
                self.book_name.save()
            else:
                super().save(*args, **kwargs)


    更新 1
    要查看图书数量,请在list_display of IssueAdmin 中使用book_name__quantity

    class IssueAdmin(admin.ModelAdmin):
        list_display = ('issue_id', 'issue_date', 'return_date', 'fine', 'book_name__quantity')
        list_filter = ('issue_date',)
        search_fields = ('issue_id',)

    【讨论】:

    • 您好 Jerin Peter George,此解决方案运行良好。但问题是书籍的数量没有显示出来。你能告诉我如何在管理仪表板中显示结果。
    • 不显示是什么意思?可以加个截图或者其他东西吗?
    • @Shojib Mahabub 将您的 admin.py 文件添加到问题中
    • 我在问题中添加了 admin.py 代码以及我想要显示更新数量的屏幕截图。目前,它在保存列下显示一个破折号( - )。
    • 更新了答案,请参阅 Update-1 部分
    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2016-01-03
    • 2018-03-08
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多