我有两个模型。一个用于UserProfile,另一个用于Company。
class UserProfile(models.Model):
company_name = models.ForeignKey(Company, on_delete = models.CASCADE, related_name = 'company')
class Company(models.Model):
name = models.CharField(max_length = 100)
我使用Django Rest Framework进行用户创建。我想要实现的是,当我创建一个新用户时,我想为该用户分配一个company_name。如果数据库中没有company_name,那么我想在旅途中创建它。但它抛出了一个错误";无效的超链接-没有匹配的URL">
您可以使用python的@property
以一种干净简单的方式来解决这个问题。它可以很好地创建和更新对象。请注意,UserPorifle的字段已重命名为公司。以下是您的操作方法:
class Company(models.Model):
name = models.CharField(max_length=100)
class UserProfile(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='company')
@property
def company_name(self):
return self.company.name
@company_name.setter
def company_name(self, value):
self.company, _ = Company.objects.get_or_create(name=value)
现在您可以使用创建对象
UserProfile.objects.create(company_name='Some name')
首先需要将UserProfile模型与用户链接起来。它应该是一对一的关系,因为一个用户应该只有一个公司,我想。
在序列化程序中,您应该添加Company模型并保存API中输入的公司名称,然后将其连接到正在创建的新用户。