Django 模型主键作为一对

2024-01-18

我正在尝试制作一个应用程序,用户可以登录他们的个人资料并将歌曲添加到他们最喜欢的列表中。我为此定义了 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。

Thanks,


我将使用默认主键(自动字段),并使用元类属性 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"),)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 模型主键作为一对 的相关文章

随机推荐