Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一对一关系的Django调用函数_Django_Django Models_One To One - Fatal编程技术网

一对一关系的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()。