Python Django:检查存在哪个相关对象

Python Django:检查存在哪个相关对象,python,django,Python,Django,我有两种不同的模型引用django用户,即招聘人员和用户档案 我有一个函数,它接收一个用户对象作为参数。我需要检查存在哪些相关对象,并采取相应的措施。我正在使用嵌套的try-catch执行此操作: def some_function(user, ....): ... try: profile = user.userprofile profile.profile_pic.save('{0}_social.jpg'.format(user.userna

我有两种不同的模型引用django
用户
,即
招聘人员
用户档案

我有一个函数,它接收一个
用户
对象作为参数。我需要检查存在哪些相关对象,并采取相应的措施。我正在使用嵌套的try-catch执行此操作:

def some_function(user, ....):
    ...
    try:
        profile = user.userprofile
        profile.profile_pic.save('{0}_social.jpg'.format(user.username))
        profile.save()
    except:
        try:
            recruiter = user.recruiter
            recruiter.cover_pic.save('{0}_social.jpg'.format(user.username))
            recruiter.save()
        except:
            pass
有没有更好/更优雅的方法

编辑:考虑的模型如下

class Recruiter(models.Model):
    user = models.OneToOneField(User, unique=True, related_name='recruiter')
    ...

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True, related_name='userprofile')
    ...
您可以像这样使用.exists()QuerySet API(假定
user
是用户模型的一个实例,并且该模型的Userprofile和Recruiter键都有一个名为
user
的字段):

请注意,
.exists()
调用将首先执行查询以查看对象是否存在,然后访问该对象的行(例如,
user.userprofile
)将运行另一个查询以实际访问该对象。一种稍微优化的方法,虽然可读性可能较低,但可能是:

def some_function(user, ...):
    userprofiles = Userprofile.objects.filter(user=user)
    recruiters = Recruiter.objects.filter(user=user)
    if len(userprofiles):
        profile = userprofiles[0]
        profile.profile_pic.save('{0}_social.jpg'.format(user.username))
        profile.save()
    elif len(recruiters):
        recruiter = recruiters[0]
        recruiter.cover_pic.save('{0}_social.jpg'.format(user.username))
        recruiter.save()
    else:
        # User has neither Userprofile nor Recruiter associated with it!
        # Do something here to handle that case, or just get rid of the else

你能展示一下招聘人员和用户档案模型吗?@Joseph:我已经更新了这个问题
def some_function(user, ...):
    userprofiles = Userprofile.objects.filter(user=user)
    recruiters = Recruiter.objects.filter(user=user)
    if len(userprofiles):
        profile = userprofiles[0]
        profile.profile_pic.save('{0}_social.jpg'.format(user.username))
        profile.save()
    elif len(recruiters):
        recruiter = recruiters[0]
        recruiter.cover_pic.save('{0}_social.jpg'.format(user.username))
        recruiter.save()
    else:
        # User has neither Userprofile nor Recruiter associated with it!
        # Do something here to handle that case, or just get rid of the else