一对一关系的Django调用函数
我有以下两门课:一对一关系的Django调用函数,django,django-models,one-to-one,Django,Django Models,One To One,我有以下两门课: class Contact(models.Model): created_by = models.ForeignKey(User, editable=False) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return 'new contact' # this should return __str__ of Infor
class Contact(models.Model):
created_by = models.ForeignKey(User, editable=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return 'new contact'
# this should return __str__ of Information if both
# first_name and last_name exists
class Information(models.Model):
contact = models.OneToOneField(Contact, related_name='information')
first_name = fields.CharField(max_length=255)
last_name = fields.CharField(max_length=255)
def __str__(self):
return ' '.join([
self.first_name,
self.last_name,
])
创建联系人
时,会自动创建联系人
和信息
之间的一对一关系
@receiver(post_save, sender=Contact)
def create_one_to_ones(sender, instance, created, **kwargs):
if created:
Information.objects.create(contact=instance)
我的问题是,当调用联系人的str时,我想调用信息的str方法。如果信息
既有名字
又有姓氏
,则应显示这些名字,如果没有,则只返回默认的新联系人
字符串
我如何调用另一个类的str方法?相关的名称是information
,因此我尝试了例如self.information.\uu str\uu()
,但在/
联系人没有任何信息。
不确定,如果我没有弄错您的问题,但是您可以访问self.information对象,还是没有
如果存在,您是否尝试过str(self.information)
?这应该调用对象的str函数。
因此,接触模型的str方法可以如下所示:
#Contact Model
def __str__(self):
if self.information.first_name is not None and self.information.last_name is not None:
return str(self.information)
return 'new contact'
谢谢,这解决了我的问题。不知道为什么我不能调用self.information.\uuuu str\uuuu(),但是使用self.information,一切都正常。我不得不稍微修改一下你的解决方案,我是这样写的:如果self.information.first_name和self.information.last_name:return str(self.information.get_name())返回“new contact”,那么一切都会正常。对于您的解决方案,即使字符串为空,它也不会返回“new contact”。返回str(self.information)当然也可以,get_name()-函数调用just_uuustr_uu()。