【发布时间】:2020-04-16 18:39:44
【问题描述】:
我是 Django 新手,还在学习。我希望跟踪我有多少 events 正在接受测试。我现在的模型看起来像
class Test(models.Model):
name = models.CharField(max_length=255)
description = models.CharField(max_length=255, blank=True)
num_of_events = models.IntegerField(default=0)
class Meta:
verbose_name = 'Test'
verbose_name_plural = 'Tests'
def __str__(self):
return self.name
class Event(models.Model):
name = models.CharField(max_length=255)
test = models.ForeignKey(Test,on_delete=models.CASCADE)
class Meta:
verbose_name = 'Event'
verbose_name_plural = 'Events'
def __str__(self):
return self.name
def save(self):
obj, created = Test.objects.update_or_create(name=self.test)
obj.num_of_events += 1
super().save()
def delete(self):
self.test.num_of_events -= 1
super().delete()
我以为我可以重写 save() 函数,但它没有在管理面板上更新并且仍然显示 0。
我想弄清楚我做错了什么。
编辑:admin.py
class TestAdmin(admin.ModelAdmin):
list_display = ('name', 'description', 'num_of_events')
fieldsets = [
(None, {'fields': ('name', 'description')})
]
class EventsAdmin(admin.ModelAdmin):
pass
class PropertyAdmin(admin.ModelAdmin):
list_display = ('name', 'property_type', 'expected_value')
admin.site.register(Test, TestAdmin)
admin.site.register(Event, EventsAdmin)
admin.site.register(Property, PropertyAdmin)
【问题讨论】:
-
请不要存储商品数量。您可以使用 annotate 来获取每个
Test的Events 的数量。这个比较靠谱。 -
你做错的是not保存
Test对象,但无论如何,data duplication是not好主意。
标签: django django-models