我正在将Rails应用程序迁移到Django。我目前遇到一些与关系和过滤器有关的挑战。
有一个Posts
表和一个Articles
表。它们具有Categorizations
表中的类别。 Categorizations
表具有categorizable_type
,categorizable_id
和category
字段。
因此,我可以在现有的Categorizations
实例中看到categorizable_type=Post
和categorizable_type=Article
并将categorizable_id
设置为8或...
我已经找到了Django Generic Relations的文档,看来这基本上就是所用的东西。但是我目前无法在数据库上运行任何迁移。因此,我想知道如何进行这项工作,以便进行标准的对象过滤查询。
以下是设置示例:
class Articles(models.Model):
id = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=1000)
class Posts(models.Model):
id = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=1000)
class Categorizations(models.Model):
id = models.BigAutoField(primary_key=True)
category = models.ForeignKey(Categories, models.DO_NOTHING, blank=True, null=True)
categorizable_type = models.CharField(max_length=1000, blank=True, null=True)
categorizable_id = models.BigIntegerField(blank=True, null=True)
所以我希望能够做这样的事情:
acticles_in_category_2 = Articles.objects.filter(categorization__catogory.id=2)
问题是我无法在现有数据库上进行任何结构更改或迁移。 现在看来,我可能不得不通过一些自定义sql查询来解决此问题。还值得一提的是,最终目标是通过Django Rest Framework端点进行这些过滤,因此,如果有针对该特定用例的任何变通办法,将非常欢迎。