Django

时间:2017-11-08 19:34:47

标签: python django

我想创建一个日志系统来注册我在工作中需要处理的一些错误。我使用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。也许有人可以给我建议或分享一些有用的链接。谢谢。

1 个答案:

答案 0 :(得分:1)

我建议将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,]