gpt4 book ai didi

python - Django 中模型的多个日期时间字段

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:27 27 4
gpt4 key购买 nike

我想创建一个日志系统来记录我工作中需要处理的一些故障。我使用 Django,我的模型如下所示:

class Chan(models.Model):
channelname = models.CharField(max_length=30)
freq = models.FloatField(default = 0.0)
def __unicode__(self):
return u'%s' % (self.channelname)

# timestamp object
class EventTime(models.Model):
since = models.DateTimeField()
till = models.DateTimeField()
def __unicode__(self):
return u'%s' % self.since.strftime('%Y-%m-%d %H:%M')

class Fault(models.Model):
channel = models.ManyToManyField(Chan)
description = models.CharField(max_length=200, default="-")
message = models.TextField()
timeevent = models.ManyToManyField(EventTime,null=True)
visible = models.BooleanField()

首先,我只使用了一个 EventTime 对象,但我很快意识到我需要能够选择多个时间段,因为同一事件可能一天发生多次。所以每次都创建新的故障记录太繁琐了。所以我基本上需要这样的东西:

example

问题是“ManyToManyField”太不方便使用,因为我不需要为其他错误保留这些值。所以我不知道我可以使用什么解决方案。我不知道我需要多少时间段。也许我可以在表中添加一个额外的文本字段,在其中将逗号分隔的日期时间对象转换为“2017-11-06 18:36,2017-11-06 18:37”等字符串。但我不知道在哪里设置这个额外转换,因为我想在进行此转换之前使用 Django 管理站点中的标准 DateTimeField 来设置它。或者也许我可以更改界面本身并添加一些 JavaScript。也许有人可以给我建议或分享一些有用的链接。谢谢。

最佳答案

我建议使用 Many-to-one relationInlineModelAdmin 一起对于 django 管理员。

models.py

class Fault(models.Model):
channel = models.ManyToManyField(Chan)
description = models.CharField(max_length=200, default="-")
message = models.TextField()
visible = models.BooleanField()

class EventTime(models.Model):
since = models.DateTimeField()
till = models.DateTimeField()
fault = models.ForeignKey(Fault, on_delete=models.CASCADE, related_name='timeevents')

def __unicode__(self):
return u'%s' % self.since.strftime('%Y-%m-%d %H:%M')

admin.py

from .models import Fault, EventTime
from django.contrib import admin

class EventTimeInline(admin.TabularInline):
model = EventTime

@admin.register(Fault)
class FaultAdmin(admin.ModelAdmin):
# ...
inlines = [EventTimeInline,]

关于python - Django 中模型的多个日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com