Django 中的外键

foreign key in django

我有一个音乐模型和一个音乐评论模型:

class music(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'),)
    music = models.FileField()
    music_image = models.ImageField(upload_to="images/")
    singer_name = models.CharField(max_length=100)
    music_name = models.CharField(max_length=100)
    text_of_music = models.TextField()
    create = models.DateField(auto_now_add=True, blank=True, null=True)
   update = models.DateField(auto_now=True, blank=True, null=True)
    publish = models.DateField(default=timezone.now, blank=True, null=True)
    slug = models.CharField(max_length=250, unique_for_date='publish')
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
    objects = models.Manager()
    published = PublishedManager()

    class Meta:
        ordering = ('-publish',)


    def get_absolute_url(self):
        return reverse('music:music_detail',
                   kwargs={"id":self.id})


class comment(models.Model):
    # Foreignkey for each music
    For = models.ForeignKey(music, on_delete=models.CASCADE, related_name='post')
    body = models.CharField(max_length=500)
    created_on = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=True)
    commented_by = models.ForeignKey(User, on_delete=models.CASCADE)

这是我的观点:

def music_Detail(request, id=None):
    user = request.user
    template_name = 'music/music_detail.html'
    Music = music.objects.all().filter(id=id)
    new_comment = None
    Comment = comment.objects.all().filter(active=True)
    form = comment_form(data=request.POST)
    if request.method == 'POST':
        if form.is_valid():
            new_comment = form.save(commit=False)
            new_comment.For = Music
            new_comment.save()
        form = comment_form()
    return render(request, template_name, {'Music': Music, 'Comment': Comment, 'form': form})

好吧,我在评论时遇到这个错误:

Cannot assign "<QuerySet [<music: m, majid kharatha>]>": "comment.For" must be a "music" instance.

如何解决这个问题,如何显示发表评论的用户信息?

如错误所述,您必须分配一个 Music,而不是查询集。

不是filter()获取包含单个音乐的新查询集,

Music = music.objects.all().filter(id=id)

你想要get()一个:

Music = music.objects.get(id=id)