Your method is clean, if each Organisation can use the same File , then you should use models.ManytoManyField , but I doubt that Slack works like that.
In addition, using Slack, you can access files from anywhere, but every file you use may not always be published for each stream only.
The structure of the model you propose seems to be the best for what you are trying to achieve, if you have people in each organization using your application, then you may need to develop a new model for each person.
This is what I need:
class Organization(models.Model):
source share