save delete:
@ozgur, , , , Model.delete(), PublishInfo:
class Book(models.Model):
    info = models.OneToOneField(
        PublishInfo, on_delete=models.CASCADE)
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if not self.info:
            self.info = Publish.objects.create()
            super().save(*args, **kwargs)
    def delete(self, *args, **kwargs):
        super().delete(*args, **kwargs)
        if self.info:
            self.info.delete()
:
, , , PublishInfo .
, ?
class PublishInfoAttachedModel(models.Model):
    info = models.OneToOneField(
        PublishInfo, related_name='$(class)s',
        on_delete=models.CASCADE)
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if not self.info:
            self.info = Publish.objects.create()
            super().save(*args, **kwargs)
    def delete(self, *args, **kwargs):
        super().delete(*args, **kwargs)
        if self.info:
            self.info.delete()
    class Meta:
        abstract = True
abstract = True .
, PublishInfo , , :
class Book(PublishInfoAttachedModel, 
           models.Model):
    pass
class NewsPaper(PublishInfoAttachedModel, 
           CommentsAttachedModel,  # if we have other attached model info
           models.Model):
    pass
, models.Model , , Model.