我想实现一个更新功能quantity
在LibraryBook
每个管理中增加了一本书,时间SingleBook
上admin
的网站。我一直在寻找这样做的方法,但无济于事。任何指针,包括指向文档的链接,将不胜感激。这是我的代码:
#models.py
class LibraryBook(models.Model):
book_title = models.CharField(max_length=100, blank=False)
book_author_id = models.ForeignKey(BookAuthors, on_delete=models.CASCADE)
category = models.ForeignKey(BookCategory, on_delete=models.CASCADE)
quantity = models.IntegerField(blank=False, default=0)
number_borrowed = models.IntegerField(default=0)
def __unicode__(self):
return unicode(self.book_title)
class SingleBook(models.Model):
serial_number = models.CharField(primary_key=True , max_length=150, blank=False)
book_id = models.ForeignKey(LibraryBook, on_delete=models.CASCADE)
is_available_returned = models.BooleanField(default=True)
is_borrowed = models.BooleanField(default=False)
def __unicode__(self):
return unicode(self.book_id)
#admin.py
class SingleBookAdmin(admin.ModelAdmin):
list_display = ('book_id', 'serial_number')
class LibraryBookAdmin(admin.ModelAdmin):
list_display = ('book_title', 'book_author_id', 'quantity')
search_fields = ('book_title', 'book_author_id')
fields = ('book_title', 'book_author_id', 'quantity')
PS:我省略了导入和admin.site.register
代码
Django==1.9.8
django-material==0.8.0
django-model-utils==2.5.1
psycopg2==2.6.2
wheel==0.24.0
如果您只想在管理员更新记录时进行更改,最好的方法是在ModelAdmin中覆盖save_model方法
根据是否要添加或更改对象,为save_model方法提供HttpRequest,一个模型实例,一个ModelForm实例和一个布尔值。在这里,您可以执行任何保存前或保存后的操作。
class SingleBookAdmin(admin.ModelAdmin):
list_display = ('book_id', 'serial_number')
def save_model(self, request, obj, form, change):
admin.ModelAdmin.save_model(self, request, obj, form, change)
if obj.is_borrowed:
do something to obj.book_id.quantity
else:
do something to obj.book_id.quantity
from django.dispatch.dispatcher import receiver
from django.db.models.signals import post_save
@receiver(post_save, sender=SingleBook)
def user_updated(sender,instance, **kwargs):
''' Fired when a SingleBook is updated or saved
we will use the opporunity to change quantity'''
# your logic here
另一方面,如果您想根据所有用户操作进行更改,则捕获post_save信号是可行的方法。无论哪种情况,您都可能要覆盖模型中的from_db方法,以跟踪哪些字段已更改。
您可能还需要改变quantity
和number_borrowed
对IntegerFields
(除非你只使用SQLite在这种情况下,它并不重要)
也book_author_id
可能应该是book_author,book_id
应该应该是book(这不是规则,只是避免使用丑陋的book_id_id引用的约定)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句