Django动态选择外国密钥关系模型



我有一个我一直在News模型中使用的Comment模型:

class Comment(models.Model):
    news = models.ForeignKey(News, on_delete=models.CASCADE)
    posted_by = models.ForeignKey(Student, on_delete=models.CASCADE)
    content = models.TextField(max_length=2048)
    posted_on = models.DateTimeField(auto_now_add=True)
    edited = models.BooleanField(default=False)
    last_edited_on = models.DateTimeField(auto_now=True)

    def __str__(self):
        return '{} - {}'.format(self.posted_by, self.news)

但是现在我有了Materials模型,我也想在那里注释,但是使用相同的Comments模型。有没有一种方法可以动态选择外键关系( news = models.ForeignKey(...)-> news_or_material = ...或类似的东西)。

当然我可以编写一个单独的型号(MaterialComment),但是我想重复使用我的代码。

然后在我的视图集中,我应该做这样的事情(我正在使用django rest框架):

def create(self, request, news_pk=None):
    news = get_object_or_404(News, id=news_pk)
    context = {'request': request, 'news': news}
    serializer = self.get_serializer_class()(
        context=context, data=request.data
    )
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(
        serializer.validated_data,
        status=status.HTTP_201_CREATED,
        headers=headers
    )

我需要将news_pk参数从URL转到NewsMaterialpk,以及news_or_material = get_object_or_404(...)

如果您要开发它。然后,使用Django提供的通用foreignkey将是明智的。

通用外键django

相关内容

  • 没有找到相关文章

最新更新