在Django Admin中列出存储在另一个模型中的所有值

2024-10-02 10:19:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小项目,我需要创建一个系统来记录一个人在几个时间段(例如,“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的Admin中创建了一个新的日期,那么tmpHour中存储的所有时隙都将填充相应的字段。像这样的

Expected

但是,我不知道如何在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)

结果如下。它需要我手动选择时间段

Currently

如何修改admin.py使tmpHour中的所有时隙自动弹出并填充字段


Tags: selftrueautodatetimedateadmintimemodels
1条回答
网友
1楼 · 发布于 2024-10-02 10:19:32

或许可以尝试这样的方法(未经测试):

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

相关问题 更多 >

    热门问题