Patrick McElhaney
Patrick McElhaney

Reputation: 59341

Django Admin's "view on site" points to example.com instead of my domain

I added a get_absolute_url function to one of my models.

def get_absolute_url(self):
    return '/foo/bar' 

The admin site picks it up and adds a "view on site" link to the detail page for that object (when I put a real URL there instead of "/foo/bar").

The problem is instead of going to http://localhost:8000/foo/bar, it goes to http://example.com/foo/bar.

What am I doing wrong?

Upvotes: 31

Views: 10970

Answers (6)

Xerion
Xerion

Reputation: 3281

If you are on newer versions of django. the data migration is like this:

from django.conf import settings
from django.db import migrations

def change_site_name(apps, schema_editor):
    Site = apps.get_model('sites', 'Site')
    site = Site.objects.get(id=settings.SITE_ID)
    site.domain = 'yourdomain.com'
    site.name = 'Your Site'
    site.save()

class Migration(migrations.Migration):

    dependencies = [
        ('app', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(change_site_name),
    ]

Upvotes: 3

Gary Robertson
Gary Robertson

Reputation: 504

When you have edited a Site instance thought the admin, you need to restart your web server for the change to take effect. I guess this must mean that the database is only read when the web server first starts.

Upvotes: 1

supervacuo
supervacuo

Reputation: 9262

As others have mentioned, this is to do with the default sites framework.

If you're using South for database migrations (probably a good idea in general), you can use a data migration to avoid having to make this same database change everywhere you deploy your application, along the lines of

from south.v2 import DataMigration
from django.conf import settings

class Migration(DataMigration):

    def forwards(self, orm):
        Site = orm['sites.Site']
        site = Site.objects.get(id=settings.SITE_ID)
        site.domain = 'yoursite.com'
        site.name = 'yoursite'
        site.save()

Upvotes: 4

Zaur Nasibov
Zaur Nasibov

Reputation: 22679

The funniest thing is that "example.com" appears in an obvious place. Yet, I was looking for in in an hour or so.

Just use your admin interface -> Sites -> ... there it is :)

Upvotes: 6

Tony Edgecombe
Tony Edgecombe

Reputation:

You can change this in /admin/sites if you have admin enabled.

Upvotes: 4

Alex Koshelev
Alex Koshelev

Reputation: 17489

You have to change default site domain value.

Upvotes: 28

Related Questions