Необходимо сгенерировать код клиента и проекта для клиента и проекта в django rest framework

models.py

class Client(models.Model):

    client_name=models.CharField(max_length=30,default=None)
    client_code = models.CharField(max_length=3, default=None, null=True)
    company=models.CharField(max_length=200) 
    finance_contact_email=models.EmailField(max_length=25,default=None)
    business_purpose=models.CharField(max_length=50,null=True,default=None)
    location=models.CharField(max_length=200)
    emergency_contact=models.CharField(max_length=200,null=True,default=None)
    website=models.URLField(max_length=200,null=True)
    comments=models.TextField(max_length=300,null=True, blank=True)
    start_Date = models.DateTimeField(max_length=10,null=True)
    end_Date=models.DateField(max_length=10,null=True)
 
    class Meta:
        
        db_table ='Client'
    
    def __str__(self):
        return '{}'.format(self.client_name)

#Project model
class Project(models.Model):

    project_code = models.CharField(primary_key=False, editable=False, max_length=10,default=None,null=True)
    #client_project_code = models.CharField(primary_key=False, editable=False, max_length=10,default=None,null=True)
    project_name = models.CharField(max_length=30,unique=True,default=None)
    client_code = models.ForeignKey(Client,on_delete=CASCADE,related_name="Client5",default=None, null=True) # need to get the client code instead of name but the name should be returned in client model
    client= models.ForeignKey(Client,on_delete=CASCADE,related_name="Client1",default=None)
    user=models.ManyToManyField(User,related_name='users',default=None)
    description=models.TextField()
    type=models.TextField()                                      #dropdown
    start_date = models.DateTimeField(max_length=10)
    end_date=models.DateTimeField(max_length=10)
    technical_contact_name = models.CharField(max_length=30)
    email=models.EmailField(max_length=254,default=None)
    phone = PhoneField(blank=True)
    delivery_head_contact_name=models.CharField(max_length=30)
    
    class Meta:
        
        db_table ='Project'


    def save(self, **kwargs):
        if not self.id:
            max = Project.objects.aggregate(id_max=Max('project_code'))['id_max']
            self.project_code = "{}{:03d}".format('', max if max is not None else 1)
        super().save(*kwargs)

    def __str__(self):
        return '{}'.format(str(self.client_code), str(self.project_code))
<

примечание: изменения и поля должны быть отражены в портале администратора django.

Вы можете работать с:

class Project(models.Model):
    # …
    
    def __str__(self):
        if self.client_code is not None:
            return f'{self.client_code.client_code}{self.project_code}'
        else:
            return self.project_code

Но не так уж много смысла давать вашему ForeignKey объекту Client имя client_code: это вернет Client объект, а не его имя или код. Таким образом, client, вероятно, является лучшим выбором, чем client_code.

Вернуться на верх