gpt4 book ai didi

Django 模型主键成对

转载 作者:行者123 更新时间:2023-12-02 00:48:26 25 4
gpt4 key购买 nike

我正在尝试制作一个应用程序,用户可以在其中登录他们的个人资料并将歌曲添加到他们最喜欢的列表中。我正在为此定义 M2M 关系。

我的问题是如何说(歌曲,歌手)的组合是独一无二的?搜索了一下,发现通过unique_together或许可以。这是正确的设置方式吗?

模型.py:

from django.contrib.auth.models import User


class Singer(models.Model):
name = models.CharField(max_length=500, unique=True)

def __str__(self):
return self.name


class Song(models.Model):
id = models.AutoField(primary_key=False)
singer = models.ForeignKey(Singer, on_delete=models.CASCADE, related_name='song')
name = models.CharField(max_length=500)

Class Meta:
unique_together = (singer, id)

def __str__(self):
return self.name

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
songs = models.ManyToManyField(Song, related_name='profile')

def __str__(self):
return self.user.username

如果您认为关系不正确,请随时更正我的 models.py。

谢谢,

最佳答案

我会使用默认主键(自动字段),并使用元类属性 unique_together

   class Song(models.Model):
singer = models.ForeignKey(Singer, on_delete=models.CASCADE, related_name='song')
name = models.CharField(max_length=500)

class Meta:
unique_together = (("singer", "name"),)

它将充当“代理”主键列。

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

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