【问题标题】:Django dynamically choose a foreign key relation modelDjango 动态选择外键关系模型
【发布时间】:2017-05-14 15:59:27
【问题描述】:

我有一个 Comment 模型,一直用于 News 模型:

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 模型,我也想在那里有 cmets,但要使用相同的 Comments 模型。有没有办法动态选择外键关系(news = models.ForeignKey(...) -> news_or_material = ... 或类似的东西)。

当然我可以写一个单独的模型(MaterialComment),但我想重用我的代码。

然后在我的视图中我应该做这样的事情(我正在使用Django REST Framework):

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
    )

我需要将 URL 中的 news_pk 参数转换为 pkNewsMaterial 和分别为 news_or_material = get_object_or_404(...)

【问题讨论】:

标签: django python-3.x django-models foreign-keys generic-foreign-key


【解决方案1】:

如果你正在开发这个。那么最好使用 Django 提供的 GenericForeignKey。

Generic Foreign Key Django

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2013-05-27
    • 2023-01-26
    • 1970-01-01
    • 2012-07-22
    • 2018-01-10
    • 2015-05-29
    相关资源
    最近更新 更多