首页 > 解决方案 > /spotify/liked/ 处的 ValueError:无法分配“某些值”:“Liked_Songs.track_name”必须是“个人资料”实例

问题描述

所以我有一些用户,他们的个人资料是在用户创建后自动创建的Django Signals

models.py

class Profile(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
class Meta:
   db_table = "Profile"


class Liked_Songs(models.Model):
   track_name = models.ForeignKey(Profile , on_delete= models.CASCADE , related_name="track")
   artiste_name= models.ForeignKey(Profile, on_delete= models.CASCADE , related_name="artiste")
   album_name = models.ForeignKey(Profile, on_delete= models.CASCADE, related_name= "album")

class Meta:
    db_table = "Liked Songs"

def __str__(self):
    return self.track_name
  1. 在这个Liked_Songs模型中,我views.py访问一个 API,我的目标是允许该模型中的所有字段都填充来自 API 的数据。所以会有多个track_name等收到。所以每个配置文件可以有很多track names等。ForeignKey适合这个吗?

  2. 但是,当我使用下面的这条路线时,我收到了我在问题描述中所述的错误。 Views.py

    def liked(request):
    try:
      if "access_token" in request.session:
         sp = Spotify(auth = request.session.get("access_token"))
         liked = sp.current_user_saved_tracks(limit=30)['items']
      for idx, item in enumerate(liked):
         track = item['track']["name"]
         artist= item["track"]["artists"][0]["name"]
         album = item["track"]["album"]["name"]
    
         Liked_Songs.objects.create(
             track_name= track,
             artiste_name= artist,
             album_name = album
         ).save()
    
     except SpotifyException:
         return redirect(reverse("login"))
    

标签: djangodjango-models

解决方案


您将配置文件 ID 存储在轨道中,因此您无法在其中传递名称,因此请尝试在其中传递配置文件 ID 试试这个track_name_id = profile_id


推荐阅读