Перечислите все значения, хранящиеся в другой модели в Django Admin - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть небольшой проект, мне нужно создать систему для записи того, что человек делал каждый день в течение нескольких временных интервалов (например, «8: 00-9: 00», «10: 00-11: 00», "13: 00-14: 00").Я реализовал проект в Django и использую Django Admin для представления системы.

Я создал три модели tmpDate, tmpHour, tmpDateHour в models.py.

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, будут заполнены соответствующими полями.Примерно так

Expected

Однако я не знаю, как выполнить настройку в админке, у меня в настоящее время есть следующие настройки в 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 автоматически появлялись и заполняли поля?

1 Ответ

0 голосов
/ 28 февраля 2019

Может быть попробовать что-то вроде этого (не проверено):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...