python - Check if a OneToOne relation exists in Django -


now i'm using django 1.6

i have 2 models relates onetoonefield.

class a(models.model):     pass  class b(models.model):     ref_a = models.onetoonefield(related_name='ref_b', null=true) 

first see code points out problem:

a1 = a.objects.create() a2 = a.objects.create() b1 = b.objects.create() b2 = b.objects.create(ref_a=a2)  # call: print(a1.ref_b)  # doesnotexist exception raised print(a2.ref_b)  # returns b2 print(b1.ref_a)  # returns none print(b2.ref_a)  # returns a2 

now problem is, if want check a object, judge whether exists b objects referencing it. how can do?

the valid way tried try , catch exception, there other prettier way?


my effort:

1 - below code works, ugly!

b = none try:     b = a.ref_b except:     pass 

2 - tried check attributes in a, not working:

b = a.ref_b if hasattr(a, 'ref_b') else none 

do meet same problem, friends? please point me way, thank you!

so have least 2 ways of checking that. first create try/catch block attribute, second use hasattr.

class a(models.model):    def get_b(self):        try:           return self.b        except:           return none  class b(models.model):    ref_a = models.onetoonefield(related_name='ref_b', null=true) 

please try avoid bare except: clauses. can hide problems.

the second way is:

class a(models.model):     def get_b(self):        if(hasattr(self, 'b')):            return self.b        return none  class b(models.model):     ref_a = models.onetoonefield(related_name='ref_b', null=true) 

in both cases can use without exceptions:

a1 = a.objects.create() a2 = a.objects.create() b1 = b.objects.create() b2 = b.objects.create(ref_a=a2)  # call: print(a1.get_b)  # no exception raised print(a2.get_b)  # returns b2 print(b1.a)  # returns none print(b2.a)  # returns a2 

there no other way, throwing exception default behaviour django one 1 relationships.

and example of handling official documentation.

>>> django.core.exceptions import objectdoesnotexist >>> try: >>>     p2.restaurant >>> except objectdoesnotexist: >>>     print("there no restaurant here.") there no restaurant here. 

Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -