python - Django与领域和自身的多对多关系独特

标签 python django postgresql model many-to-many

我尝试使用语言和内容创建帖子,并将其与同一页面的其他版本相关联,但我遇到了困难

class Page(models.Model):
    content = models.TextField()
    language = models.CharField(max_length=7, choices=settings.LANGUAGES)
    versions = models.ManyToManyField('self', blank=True)
    class Meta:
        unique_together = ('language', 'versions',)

这将无法正常工作,因为 Django 不允许创建“唯一”ManyToMany 字段。

然后我尝试通过相关模型建立相同的关系:

class VersionsPage(models.Model):
    pass
    # ToDo: add unique together here,  to foreign key field

class Page(models.Model):
    ...
    versions = models.ManyToManyField('self', blank=True, through="VersionsPage")

有人知道如何在不使用对称=False的情况下做到这一点吗?

最佳答案

我认为您正在寻找这样的东西:

class Page(models.Model):
    pass

class PageVersion(models.Model):
    page = models.ForeignKey(Page, related_name='versions')
    content = models.TextField()
    language = models.CharField(max_length=7, choices=settings.LANGUAGES)

    class Meta:
        unique_together = ('page', 'language',)


#getting all page versions:
page = Page.objects.get(pk=some_id)
versions = page.versions.all()

关于python - Django与领域和自身的多对多关系独特,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40779788/

相关文章:

postgresql - 在 postgresql 中查询递归表和其他表?

python - 安装 pgdb : pg_config tool is not available

python - 如何监控 networkx 图创建的状态?

python - 从 os.path.isfile() 函数接收 AttributeError

python - 特定文件夹的内容迁移

python - 递归查找已更改的文件

django - 将 Django 管理操作限制为一个已检查对象

python - 如何在我的项目中安装 django-scheduler。我收到一条错误消息,指出无法导入模块

django - 从 Django 中的单个页面处理不同表单的最佳方法是什么?

mysql - SQL子查询与UNION ALL查询结合