| 35 | | # Next, look for a many-to-one relationship to sites |
|---|
| 36 | | elif hasattr(obj, 'get_site'): |
|---|
| 37 | | try: |
|---|
| 38 | | object_domain = obj.get_site().domain |
|---|
| 39 | | except Site.DoesNotExist: |
|---|
| 40 | | pass |
|---|
| | 33 | # First, look for an many-to-many relationship to sites |
|---|
| | 34 | for field in opts.many_to_many: |
|---|
| | 35 | if field.rel.to is Site: |
|---|
| | 36 | try: |
|---|
| | 37 | object_domain = getattr(obj, field.name).all()[0].domain |
|---|
| | 38 | except Site.DoesNotExist: |
|---|
| | 39 | pass |
|---|
| | 40 | if object_domain is not None: |
|---|
| | 41 | break |
|---|
| 42 | | # Then, fall back to the current site (if possible) |
|---|
| 43 | | else: |
|---|
| | 43 | # Next look for a many-to-one relationship to site |
|---|
| | 44 | if object_domain is None: |
|---|
| | 45 | for field in obj._meta.fields: |
|---|
| | 46 | if field.rel and field.rel.to is Site: |
|---|
| | 47 | try: |
|---|
| | 48 | object_domain = getattr(obj, field.name).domain |
|---|
| | 49 | except Site.DoesNotExist: |
|---|
| | 50 | pass |
|---|
| | 51 | if object_domain is not None: |
|---|
| | 52 | break |
|---|
| | 53 | |
|---|
| | 54 | # Fall back to the current site (if possible) |
|---|
| | 55 | if object_domain is None: |
|---|
| 47 | | # Finally, give up and use a URL without the domain name |
|---|
| 48 | | return http.HttpResponseRedirect(obj.get_absolute_url()) |
|---|
| 49 | | return http.HttpResponseRedirect('http://%s%s' % (object_domain, obj.get_absolute_url())) |
|---|
| 50 | | |
|---|
| | 59 | pass |
|---|
| | 60 | |
|---|
| | 61 | # If all that malarky found an object domain, use it; otherwise fall back |
|---|
| | 62 | # to whatever get_absolute_url() returned. |
|---|
| | 63 | if object_domain is not None: |
|---|
| | 64 | return http.HttpResponseRedirect('http://%s%s' % (object_domain, absurl)) |
|---|
| | 65 | else: |
|---|
| | 66 | return http.HttpResponseRedirect(absurl) |
|---|
| | 67 | |
|---|