Task #3950

Updated by almost 2 years ago

Create the Tag model.

* name CharField(255)
* manifest ForeignKey(Manifest, null=True, related_name='tags', on_delete=CASCADE)
* manifest_list ForeignKey(ManifestList, null=True, related_name='tags', on_delete=CASCADE)

unique_together = (name, manifest)
unique_together = (name, manifest_list)

Design assumptions:

* Pre-save validation on the model ensures that one-of but not will prevent both _manifest_ manifest and _manifest_list_ are manifest_list from being set.
* Tag name uniqueness and referential integrity{1} will be enforced by the plugin. During sync, this happens in the task logic. For content add/remove API calls, this happens in the (docker specific) view. Both can re-use the same code.

*[1]* Tag referential integrity is ensuring that when a manifest or manifest_list is removed from a repository, referencing tags are also removed. Also, when a tag is added to a repository, referenced manifest or manifest_list are also added.