gpt4 book ai didi

主键上的 Django unique_together

转载 作者:行者123 更新时间:2023-12-02 00:06:29 30 4
gpt4 key购买 nike

目前我有三个模型:

class Tutorial(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
videos = models.ManyToManyField('TutorialVideo', through='TutorialVideoThrough', blank=True)


class TutorialVideo(models.Model):
name = models.CharField(max_length=100)
video = S3DirectField(dest='tutorial_vids')
length = models.CharField("Length (hh:mm:ss)",max_length=100)
tutorials = models.ManyToManyField(Tutorial, through='TutorialVideoThrough', blank=True)


class TutorialVideoThrough(models.Model):
tutorial = models.ForeignKey(Tutorial, related_name='tutorial_video_through', blank=True, null=True)
video = models.ForeignKey(TutorialVideo, related_name='video_tutorial_through', blank=True, null=True)
order = models.IntegerField()

一个Tutorial可以通过TutorialVideoThrough拥有多个TutorialVideo。在 TutorialVideoThrough 上,我有一个 order 字段来决定以什么顺序显示视频。有没有办法验证不存在重复的顺序整数?例如,如果我通过TutorialVideoThrough 将两个TutorialVideos 链接到Tutorial,并且我将第一个视频作为顺序1,那么我不应该能够将第二个视频作为顺序1。

我尝试在TutorialVideoThrough上使用unique_together = ('id', 'order'),但没有成功。

最佳答案

primary_key 始终是唯一的,因此您的 unique_together 对也将始终是唯一的。

如果您必须确保没有相同顺序的视频,您必须首先回答问题:关于什么?

如果您希望在 Tutorial 中的 TutorialVideo 列表中保持唯一性,您的 unique_together 应该是:

unique_together = (('tutorial', 'order'),)

如果您希望 TutorialVideo 中的 Tutorial 列表具有唯一性,您的 unique_together 应该是:

unique_together = (('video', 'order'),)

但是将 order 设置为唯一并不是一个好主意,在尝试对字段重新排序时会遇到一些问题。

关于主键上的 Django unique_together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32973746/

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