Professional Documents
Culture Documents
I am writing a social app, which necessitates (makes necessary) the use of multiple
inheritance. I am having a problem with one of the inheritable models, in that when
I inherit from that model, I can't delete instances of the derived (child) class.
class Actionable:
self.is_setup = False
self.is_setup = True
# ....
class SocialActivity(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,
db_index=True,
related_name='%(app_label)s_%
(class)s_content_types',
related_query_name='%(app_label)s_%
(class)s_content_type')
object_id = models.PositiveIntegerField(db_index=True)
content_object = GenericForeignKey('content_type', 'object_id')
actor = models.ForeignKey(User, blank=False, null=False,
on_delete=models.CASCADE,
related_name='%(app_label)s_%(class)s_users',
related_query_name='%(app_label)s_%(class)s_user')
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"SocialActivity: {self.content_type.name}, {self.object_id},
{self.actor.username}, {datetime.strftime(self.created_at,'%Y-%B-%d %H:%M:%s')} "
class Meta:
abstract = True
constraints = [
models.UniqueConstraint(fields=['content_type',
'object_id', 'actor'],
name="%(app_label)s_%(class)s_user_unique")
]
class SocialMediaSharingPlatform(models.Model):
name = models.CharField(max_length=64, unique=True)
endpoint = models.URLField()
post_params = JSONField()
functor = models.TextField()
class SocialMediaShareDefinition(SocialActivity):
platform = models.ForeignKey(SocialMediaSharingPlatform, blank=False,
null=False, on_delete=models.CASCADE,
related_name='%(app_label)s_%
(class)s_social_media_shares',
related_query_name='%(app_label)s_%
(class)s_social_media_share')
class Meta:
constraints = [
models.UniqueConstraint(
fields=['platform','actor','content_type','object_id'],
name='unique_user_socialmedia_share'
)
] + SocialActivity.Meta.constraints
class Meta:
ordering = ('-created_at',)
def get_absolute_url(self):
return NotImplementedError("Subclasses of SocialMediaShareable must
implement an get_absolute_url() method!")
# ...
class Meta:
abstract = True
me = gum().objects.get(id=1)
sod = SOD.objects.create(user=me)
This is probably something trivial, but I have been staring the code for days, so
could do with another set of eyes to point out where I'm going wrong.