【问题标题】:How to add a timestamp to a ManyToMany record如何向多对多记录添加时间戳
【发布时间】:2015-10-24 22:16:36
【问题描述】:

我有以下型号:

class Meeting(models.Model):
    meeting_title = models.CharField(default='', max_length=128, blank=True, null=True)
    meeting_time = models.TimeField(blank=False, null=False)
    meeting_date = models.DateField(blank=False, null=False) 
    meeting_visitors = models.ManyToManyField(Visitor, blank=True, default="")

还有如下形式:

class AddMeetingForm(forms.ModelForm):
    class Meta:
            model = Meeting
            fields = '__all__'

由于meeting_visitors 是一个ManyToMany 字段,它可以包含一个或多个Visitor 记录。

此表格可以在一天中的不同时间更新。我想知道添加到会议中的每个Visitor 的时间戳(即在现实世界中,当他们到达会议时)。

最简单/最有效的方法是什么?

我知道我可以得到模型实例通过meeting_updated = models.DateTimeField(auto_now_add =False, auto_now=True) 更新的timestamp,但我想要meeting_visitors 字段中的每条记录的等价物。

【问题讨论】:

标签: python django django-models django-forms many-to-many


【解决方案1】:

您可以在多对多字段中使用through 关键字轻松创建这种关系

Django 允许您指定将用于管理 多对多的关系。然后,您可以在 中间模型。中间模型与 ManyToManyField 使用 through 参数指向模型 将充当中介。

因此,您可以这样使用它。

class Visitor(models.Model):
    name = models.CharField(max_length=30)

class Meeting(model.Model):
    title = models.CharField(max_length=30)
    time = models.TimeField(blank=False, null=False)
    date = models.DateField(blank=False, null=False) 
    attendance = models.ManyToManyField(Visitor, through='Attendant')


class Attendant(models.Model):
    visitors = models.ForeignKey(Visitor)
    meeting = models.ForeignKey(Meeting)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多