我想创建一个日志系统来注册我在工作中需要处理的一些错误。我使用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对象,但我很快意识到我需要能够选择几个时间段,因为同一事件可能每天发生几次。因此,每次创建一个新的故障记录太繁琐了。所以我基本上需要这样的东西:
问题是' ManyToManyField'使用起来太不方便了,因为我不需要为其他故障保留这些值。所以我不知道我可以使用什么解决方案。我不知道我需要多少时间。也许我可以在我的表格中添加一个额外的文本字段,我将逗号分隔的日期时间对象转换为字符串,如' 2017-11-06 18:36,2017-11-06 18:37'但是我不知道在哪里设置这个额外的转换,因为我想在Django管理站点中使用一个标准的DateTimeField来进行转换之前设置它。或者也许我可以更改界面本身并添加一些Javascript。也许有人可以给我建议或分享一些有用的链接。谢谢。
答案 0 :(得分:1)
我建议将Many-to-one relation和InlineModelAdmin一起用于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,]