For a number of reasons^, I\'d like to use a UUID as a primary key in some of my Django models. If I do so, will I still be able to use outside apps like \"contrib.comments\
this can be done by using a custom base abstract model,using the following steps.
First create a folder in your project call it basemodel then add a abstractmodelbase.py with the following below:
from django.db import models
import uuid
class BaseAbstractModel(models.Model):
"""
This model defines base models that implements common fields like:
created_at
updated_at
is_deleted
"""
id=models.UUIDField(primary_key=True, ,unique=True,default=uuid.uuid4, editable=False)
created_at=models.DateTimeField(auto_now_add=True,editable=False)
updated_at=models.DateTimeField(auto_now=True,editable=False)
is_deleted=models.BooleanField(default=False)
def soft_delete(self):
"""soft delete a model instance"""
self.is_deleted=True
self.save()
class Meta:
abstract=True
ordering=['-created_at']
second: in all your model file for each app do this
from django.db import models
from basemodel import BaseAbstractModel
import uuid
# Create your models here.
class Incident(BaseAbstractModel):
""" Incident model """
place = models.CharField(max_length=50,blank=False, null=False)
personal_number = models.CharField(max_length=12,blank=False, null=False)
description = models.TextField(max_length=500,blank=False, null=False)
action = models.TextField(max_length=500,blank=True, null=True)
image = models.ImageField(upload_to='images/',blank=True, null=True)
incident_date=models.DateTimeField(blank=False, null=False)
So the above model incident inherent all the field in baseabstract model.