У меня есть три таблицы: ReflectionDate, ReflectionItem и ReflectionItemDateLink. Отношения между ними следующие: 1) каждая запись в ReflectionDate может быть связана с несколькими записями в ReflectionItem;2) соответствие между ReflectionDate и ReflectionItem сохраняется в ReflectionItemDateLink.
#models.py
class ReflectionDate(models.Model):
date=models.DateField(default=datetime.now, blank=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.date)
class ReflectionItem(models.Model):
reflection_item=models.CharField(max_length=200,null=True,blank=True)
Yes = "Yes"
No = "No"
Include_or_not = (
(Yes, "Yes"),
(No, "No"),
)
include=models.CharField(max_length=9,
choices=Include_or_not,
default=Yes)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.reflection_item)
class ReflectionItemDateLink(models.Model):
date=models.ForeignKey(ReflectionDate,on_delete=models.CASCADE)
item=models.ForeignKey(ReflectionItem,on_delete=models.CASCADE)
remark=models.CharField(max_length=200,null=True,blank=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
В админке Django у меня есть
#admin.py
##about reflection items
class ReflectionItemAdmin(admin.ModelAdmin):
pass
class ReflectionItemInlineFormSet(BaseInlineFormSet):
model = ReflectionItemDateLink
def __init__(self, *args, **kwargs):
super(ReflectionItemInlineFormSet, self).__init__(*args, **kwargs)
self.initial=[]
ids=ReflectionItem.objects.filter(include='Yes').values_list('pk', flat=True)
for item_i in ids:
self.initial+=[{'item':ReflectionItem.objects.get(pk=item_i)}]
class ReflectionItemInline(admin.TabularInline):
model = ReflectionItemDateLink
formset = ReflectionItemInlineFormSet
print(ReflectionItem.objects.count())
#extra = DeepHour.objects.count()
extra = ReflectionItem.objects.filter(include='Yes').count()
class ReflectionDateAdmin(admin.ModelAdmin):
inlines=[ReflectionItemInline]
# pass
admin.site.register(ReflectionDate,ReflectionDateAdmin)
admin.site.register(ReflectionItem,ReflectionItemAdmin)
Моя цель: когда я создаю новую запись в ReflectionDate (используя ReflectionDateAdmin), я хочу, чтобы все записи ReflectionItem были с include = Yesбыть предварительно заполненным и автоматически показанным на странице ReflectionDateAdmin. Это было в основном реализовано с использованием ReflectionItemInline и ReflectionItemInlineFormSet. Примерно так (статический не отображается должным образом, но пока не проблема)
Однако я обнаружил, что если я добавлю новую запись вReflectionItem, новая запись не будет отображаться при создании новой записи в ReflectionDate. Я думаю, что проблема в том, что следующая строка
extra = ReflectionItem.objects.filter(include='Yes').count()
не будет обновлена при добавлении записи в ReflectionItem (кажется, что ReflectionItemInline обновляется только при перезапуске сервера).
Мой вопрос: как я могу обновить эту «лишнюю» строку в ReflectionItemInline, когда новая запись создается в ReflectionItem? Или есть какая-нибудь другая реализация?
Надеюсь, я проясню. Большое спасибо!