Необходимо сгенерировать код клиента и проекта для клиента и проекта в 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