PAGE can be shown on multiple BLOGS.
ACCOUNT can see BLOG PAGE if he/she has PERMISSION on that PAGE for that BLOG.
Here are the models - I think models/DB organization is correct this way:
class Account(models.Model): user = models.OneToOneField(User,on_delete=models.CASCADE,) class Page(RulesModel): name = models.CharField(max_length=250) class Blog(models.Model): pages = models.ManyToManyField(Page, through='BlogPage') class BlogPage(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) page = models.ForeignKey(Page, on_delete=models.CASCADE) viewable_by = models.ManyToManyField(Account, through='BlogPagePermission') class BlogPagePermission(models.Model): blog_page = models.ForeignKey(BlogPage, on_delete=models.CASCADE) account = models.ForeignKey(Account, on_delete=models.CASCADE)
Now when assigning BLOG PAGE PERMISSIONS to ACCOUNTS, I would like to have this scenario:
1. You open edit page for specific Account
2. You see a list of all PAGES for each BLOG
3. then you mark which PAGES of each BLOG can be viewed.
The problem is I don’t see a way how to achieve this (or similar) by using Django Admin ?
For now I have this:
class BlogPagePermissionInline(admin.TabularInline): model = BlogPagePermission extra = 0 show_change_link = False fields = ['blog_page',] class AccountAdmin(admin.ModelAdmin): inlines = [BlogPagePermissionInline,]
This way when I open
Account admin page, I can add
BlogPagePermission and via select widget I can choose one.
But that is not efficient way.