Django unique together relationship with field and manytomany on self

百般思念 提交于 2019-12-24 00:43:43

问题


I'm try create post with language and content, and relate it on other versions of same page, but I'm get stuck

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',)

This will not work properly, because Django not allow make "unique" ManyToMany fields.

Then I'm try make same relationship trough related model:

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")

Anyone know how to make that without using symmetrical=False?


回答1:


I think you are looking for something like this:

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()


来源:https://stackoverflow.com/questions/40779788/django-unique-together-relationship-with-field-and-manytomany-on-self

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!