【问题标题】:Auto-increment a field within each category?在每个类别中自动增加一个字段?
【发布时间】:2014-05-08 21:18:43
【问题描述】:

我有一个称为序列的自动增量字段。我只希望它在这个模型所在的主题中增加 1。通常最多是 10 左右。然后为新主题重置。我希望在保存覆盖方法中完成此操作:

class Video(TimeStampedModel):
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200)
    description = models.CharField(max_length=500)
    topic = models.ForeignKey('video.VideoTopic')
    sequence = models.IntegerField(default=1)

    def save(self, *args, **kwargs):
        # Get last value of sequence and increment by 1
        top = Video.objects.order_by('-sequence')[0]
        self.sequence = top.sequence + 1
        super(Video, self).save()

我的代码的问题是 save 方法中的“top”只会获取编号最高的视频。

如何获取要保存的视频主题,以便正确过滤我的查询?

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    self.topic获取它:

    top = Video.objects.filter(topic=self.topic).order_by('-sequence')[0]
    

    您也可以使用latest(),而不是对[0] 进行排序并将其从查询集中取出:

    top = Video.objects.filter(topic=self.topic).latest('sequence')
    

    在这种情况下,latest() 将获得单个 Video 模型实例,该模型实例具有特定主题的最大 sequence 值。

    另请参阅:Overriding predefined model methods

    【讨论】:

    • 太棒了,谢谢!我最终得到: sequence_number = 1 top = Video.objects.filter(topic=self.topic).latest('sequence') if top.sequence: sequence_number = top.sequence + 1 self.sequence = sequence_number super(Video, self).save()
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多