Using a UUID as a primary key in Django models (generic relations impact)

前端 未结 6 747
旧巷少年郎
旧巷少年郎 2020-12-02 06:52

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\

6条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-02 07:29

    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.

提交回复
热议问题