需要在Django Rest框架中为客户端生成客户端和项目代码
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))
根据上面的代码,我在客户端模型中创建了一个客户端代码,我需要将客户端代码与在项目代码字段本身或新字段中自动生成的项目代码结合起来。 例如:客户代码:ICN 和项目代码:ICN001。 一件主要的事情是我希望在客户端模型中返回客户端名称,并且我需要将客户端代码从客户端模型链接到项目,我被困在该方法上,例如如何返回它?
注意:更改和字段需要反映在 django 管理门户中。
答案后更新了代码:
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)
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):
if self.client is not None:
return f'{self.client.client_code}{self.project_code}'
else:
return self.project_code
根据答案,我更新了代码并删除了客户端代码字段,因为它是客户端的重复列,当我尝试在没有客户端代码字段的情况下输入详细信息时,我收到错误“ValueError at /admin” /应用程序/项目/添加/ “str”类型的对象的未知格式代码“d””。您能帮我解决这个错误吗?
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))
As per the above code I created a client code in client model and I need to combine the client code plus the project code which is auto generated in the project code field itself or in a new field.
for ex: client code: ICN and project code: ICN001.
And one main thing is i want the client name to be returned in the client model and i need to link the client code from the client model to the project, I was stuck on that method like how to return it ?
note: the changes and the fields needs to be reflected in the django admin portal.
Updated code after the answer:
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)
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):
if self.client is not None:
return f'{self.client.client_code}{self.project_code}'
else:
return self.project_code
As per the answer I updated the code and removed the client code field as it is a duplicate column of client and when i tried to entry details without the client code field iam getting an error as "ValueError at /admin/App/project/add/
Unknown format code 'd' for object of type 'str'". Can you please help me to solve this error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用:
但是将您的
foreferkey
交给client
nameclient> client_code
:这将返回client
client> client> client> client> client> client> client> client> client> client> client> client> name ,这并不多。 对象,而不是其名称,也不是其代码。客户端
因此,可能比更好。client_code
You can work with:
But it makes not much to give your
ForeignKey
to theClient
the nameclient_code
: this will return aClient
object, not its name, nor its code.client
thus is thus probably a better choice than.client_code