OdifYltsaeb / django-multilingual

Automatically exported from code.google.com/p/django-multilingual
MIT License
0 stars 0 forks source link

fk_name 'master' is not a ForeignKey to <class 'modulo.base.models.Widget'> #98

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?

I created a model and when I want to create or edit it with the admin, I
get this error message :

fk_name 'master' is not a ForeignKey to <class 'modulo.base.models.Widget'>

It seams like Issue 61 and Issue 76 but the code is not the same anymore.

What versions of django and multilingual are you using? On what operating
system?

Django 1.0, multilingual trunk.

Model code : 

# -*- coding: utf-8 -*-
from django.contrib.sitemaps import ping_google
from django.db import models
from modulo.conf import APPS, SITE_URL
from modulo.settings import DEBUG

import hashlib
import mptt
import multilingual

# Always use lazy translations in Django models. (topics/i18n.txt)
from django.utils.translation import ugettext_lazy as _

class Rubrique(models.Model):
    app         = models.CharField(_(u'app'), choices=APPS, max_length=31)
    parent      =
models.ForeignKey('self',null=True,blank=True,related_name='children')
    last_modif  = models.DateField(_('dernière modification'),auto_now=True)
    active      = models.BooleanField(_('en ligne'), default=True)

    class Translation(multilingual.Translation):
        slug        = models.SlugField(_(u'slug'))
        title       = models.CharField(_(u'titre du menu'), max_length=50)
        description = models.CharField(_(u'titre verbeux'), max_length=255)
        content     = models.TextField(_(u'contenu'), blank=True)
        sha1        = models.CharField(u'SHA1 Path ID', max_length=40,
editable=False, db_index=True)

        def save(self):
            # On génère un identifiant unique du chemin pour retrouver la
            # bonne rubrique directement
            path = Rubrique.objects.get(pk=self.master_id).path(self.slug)
            self.sha1 = hashlib.sha1(path).hexdigest()
            super(Rubrique.Translation, self).save()

    def path(self, slug=None):
        parents = self.get_ancestors()
        if slug is None:
            slug = self.slug

        items = []
        for a in parents:
            items.append(a.slug)

        items.append(slug)
        return '/%s/' % ('/'.join(items))

    def __unicode__(self):
        return u'%s' % self.title

    def get_absolute_url(self):
        return "%s%s" % (SITE_URL, self.path())

    def save(self, force_insert=False, force_update=False):
             super(Rubrique, self).save(force_insert, force_update)
             if not DEBUG:
                 try:
                     ping_google()
                 except Exception:
                     # Bare 'except' because we could get a variety
                     # of HTTP-related exceptions.
                     pass

class Widget(models.Model):
    rubrique    = models.ForeignKey(Rubrique, related_name='widgets')

    class Translation(multilingual.Translation):
        slug        = models.SlugField(_(u'slug'))
        title       = models.CharField(_(u'titre'), max_length=100)
        description = models.TextField(_(u'description'))

    def __unicode__(self):
        return u'%s' % self.title

mptt.register(Rubrique)

Original issue reported on code.google.com by hubscher.remy on 5 May 2009 at 3:38

GoogleCodeExporter commented 8 years ago
Actually the bug come from admin.py

It did that :

from modulo.base.models import Rubrique, Widget
from django.contrib import admin

import multilingual

class BaseAdmin(multilingual.ModelAdmin):
    class Media:
        js = (
            "/tinymce/filebrowser/",
            "/tinymce/compressor/",
            "js/tiny_conf.js",
            )

admin.site.register(Rubrique, BaseAdmin)
admin.site.register(Widget, BaseAdmin)

And it did not work.

I duplicate BaseAdmin in RubriqueAdmin and WidgetAdmin and it now work.

Original comment by hubscher.remy on 5 May 2009 at 4:11