#27757 closed Bug (invalid)
The link of the "view_on_site" button is not formed according to the returning result of the "get_absolute_url" method.
Reported by: | George Tantiras | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | 1.10 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I am using Django-1.10.5 under Python-3.4.2.
from django.db import models class Product(models.Model): name = models.CharField(verbose_name="Name", max_length=100, unique=True) def get_absolute_url(self): return "test-string/{0}".format(self.id) class Flavor(models.Model): product = models.ForeignKey(Product, verbose_name="Product") name = models.CharField(verbose_name="Name", max_length=100) def get_absolute_url(self): return "test-string-2/{0}".format(self.id)
admin.py:
from django.contrib import admin from inline_online.models import Flavor, Product class FlavorInline(admin.TabularInline): model = Flavor class ProductAdmin(admin.ModelAdmin): list_display = ("id", "name") inlines = [FlavorInline, ] admin.site.register(Product, ProductAdmin) class FlavorAdmin(admin.ModelAdmin): view_on_site = True admin.site.register(Flavor, FlavorAdmin)
The view_on_site
link appears either in the main model admin view or in the inlines but the url is not the one returned from get_absolute_url
method (example: /admin/r/10/1
)
A very old ticket seem to reference the same issue: https://code.djangoproject.com/ticket/7984
Change History (11)
comment:1 by , 8 years ago
Summary: | vIew_on_site is not working with inline models → view_on_site is not working with inline models |
---|
comment:2 by , 8 years ago
Description: | modified (diff) |
---|---|
Summary: | view_on_site is not working with inline models → view_on_site does not receive the get_absolute_url returning uri |
comment:3 by , 8 years ago
Description: | modified (diff) |
---|
comment:4 by , 8 years ago
Description: | modified (diff) |
---|---|
Summary: | view_on_site does not receive the get_absolute_url returning uri → The link of the "view_on_site" button is not formed according to the returning result of the "get_absolute_url" method. |
comment:5 by , 8 years ago
Component: | Uncategorized → contrib.admin |
---|---|
Resolution: | → invalid |
Status: | new → closed |
Type: | Uncategorized → Bug |
comment:6 by , 8 years ago
I apologize for this mistake.
However, in the relevant django docs reverse url returns a string which begins with 'https://'. Correcting my get_absolute_url()
, to return a string which begins either with 'https://' or with a slash (/xxx
) the view on site link will just return its standard /admin/r/62/1/
.
On the other hand when I use an external admin app like django-suit
, while the main link works as expected (it receives the get_absolute_url()
value), the inline link -if it appears- (I cannot figure out under which circumstances it will appear) it redirects to the wrong /admin/r/62/1/
.
I will verify all the above in my main project where I use reverse()
in get_absolute_url()
.
comment:7 by , 8 years ago
Does the /admin/r/62/1/
URL redirect to the wrong get_absolute_url()
? Maybe I'm misunderstanding but your complaint seems to be that the /admin/r/62/1/
URL appears in the first place (i.e. you don't want to an intermediate redirect), but as far as I know, this is expected behavior.
comment:8 by , 8 years ago
For example:
class MyModel(models.Model): ... def get_absolute_url(self, obj): return 'http://127.0.0.1:8000/test' ...
Using native django admin, view_on_site
returns: http://127.0.0.1:8000/admin/r/19/3305/
Enabling django-suit
, view_on_site
returns: http://127.0.0.1:8000/test
The relevant links when the model is an inline, are a pure mess do not seem to work as expected.
comment:9 by , 8 years ago
I see URLs like /admin/r/62/1/
redirecting to URLsfrom get_absolute_url()
so I'm still not sure what you're reporting as a bug. This is how Django works. It's not expected that the results of get_absolute_url()
replace the /admin/...
URLs, in the links, only that the redirect changes. Please explain what "pure mess" means (and try to avoid unfriendly language like that).
If there is some problem when enabling django-suit
, then you need to report the bug to that package -- it's not part of Django.
comment:10 by , 8 years ago
Sorry, I have no intention to offend, I have corrected the inaccurate expression.
Oh, it redirects, I just understood the point. (doh)
I am not in front of my box. I will double check it when I return home.
Thank you for your solid support.
comment:11 by , 8 years ago
Finally, I sat in front of my box and found the solution to my problem. I was confused by django-suit
which falsely returned an apparently correct result.
I had to use ModelAdmin.view_on_site(obj)
instead of Model.get_absolute_url()
due to the fact that the model was unaware of the custom ModelAdmin.get_queryset()
I was using.
I feel like it is time to make an -at least- symbolic donation to redeem my lack of concentration. Thank you again for your patience and support!
The view on site links will redirect from something like
/admin/r/62/1/
to the contents ofget_absolute_url()
, however, it looks like you made a mistake:get_absolute_url()
must return a value that starts with a slash.