首页 > 解决方案 > 在 Django Admin 中列出存储在另一个模型中的所有值

问题描述

我有一个小项目,我需要创建一个系统来记录一个人在几个时间段内每天所做的事情(例如,“8:00-9:00”、“10:00-11:00”、“13 :00-14:00”)。我在 Django 中实现了这个项目,并使用 Django Admin 来展示系统。

我在models.py中创建了三个模型tmpDate、tmpHour、tmpDateHour。

from datetime import datetime
from datetime import date as datetimeDate  

class tmpDate(models.Model):
    date=models.DateField(default=datetime.now, blank=True)
    total_tmp_time=models.DecimalField(max_digits=10,decimal_places=1,default=0.0)
    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.date

class tmpHour(models.Model):
    start_time=models.TimeField()
    end_time=models.TimeField()


    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.create_time)+"-"+str(self.update_time)


class tmpDateHour(models.Model):
    date=models.ForeignKey(tmpDate,on_delete=models.CASCADE)

    hour_time=models.ForeignKey(tmpHour,on_delete=models.CASCADE)

    tmp_length=models.DecimalField(max_digits=10,decimal_places=1,default=0.0)
    comment=models.CharField(max_length=200,null=True)

    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

这个想法是我在 tmpHour 中创建了一些时隙(例如,“8:00-9:00”、“10:00-11:00”、“13:00-14:00”)。一旦我在 tmpDate 的管理员中创建了一个新的日期,那么存储在 tmpHour 中的所有时间段都将填充相应的字段。像这样的东西

预期的

但是,我不知道如何在 admin 中进行设置,我目前在 admin.py 中有以下设置,

class tmpDateHourInline(admin.TabularInline):
    model = tmpDateHour
    extra = 1

class tmpHourAdmin(admin.ModelAdmin):
    pass

class tmpDateAdmin(admin.ModelAdmin):
    inlines=[tmpDateHourInline]

admin.site.register(tmpDate,tmpDateAdmin)
admin.site.register(tmpHour,tmpHourAdmin)

这给了我以下结果。它需要我手动选择时隙。

目前

如何修改 admin.py 以使 tmpHour 中的所有时间段自动弹出并填写字段?

标签: pythondjangoforeign-keysdjango-admin

解决方案


也许尝试这样的事情(未测试):

from django.forms.models import BaseInlineFormSet

class DateHourInlineFormSet(BaseInlineFormSet):
    model = tmpDateHour

    def __init__(self, *args, **kwargs):
        super(DateHourInlineFormSet, self).__init__(*args, **kwargs)
        hour_time1 = tmpHour.objects.get(pk=1)
        hour_time2 = tmpHour.objects.get(pk=2)             
        self.initial=[{'hour_time': hour_time1}, {'hour_time': hour_time2}]

class tmpDateHourInline(admin.TabularInline):
    model = tmpDateHour
    formset = DateHourInlineFormSet
    extra = 1

推荐阅读