4 Stimmen

Kein gültiger Modellbezeichner für Django Fixture-Daten?

Ich bin sicher, dass es hier eine einfache Antwort gibt, aber ich sehe sie nicht. Ich versuche, Fixtures in meine Datenbank zu laden, aber egal, welche Modellkennung ich verwende, ich erhalte immer die DeserializationError: invalid model identifier:... Fehler.

Struktur der Datei:

testproject/
    testapp/
        fixtures/
            data.json
        __init__.py
        models.py
        tests.py
        views.py
    sqlite3.db
    __init__.py
    manage.py
    settings.py
    urls.py

Da dies mein erster Versuch mit Vorrichtungen ist, verwende ich das Modell aus http://www.djangoproject.com/documentation/models/fixtures/ :

from django.db import models
from django.conf import settings

class Article(models.Model):
    headline = models.CharField(max_length=100, default='Default headline')
    pub_date = models.DateTimeField()

    def __unicode__(self):
        return self.headline

    class Meta:
        ordering = ('-pub_date', 'headline')

data.json:

[
    {
        "pk": "3",
        "model": "testapp.article",
        "fields":
        {
            "headline": "Time to reform copyright",
            "pub_date": "2006-06-16 13:00:00"   
        }
    }, 
    {    
        "pk": "2",
        "model": "testapp.article",
        "fields":
        {
            "headline": "Poker has no place on ESPN",
            "pub_date": "2006-06-16 12:00:00"
        }
    }, 
    {    
        "pk": "1", 
        "model": "testapp.article",
        "fields":
        {
            "headline": "Python program becomes self aware",
            "pub_date": "2006-06-16 11:00:00"
        }
    }
]

Ich habe versucht testapp.article , testproject.article , testproject.testapp.article und erhalten alle den gleichen Fehler. Ich benutze 1.2.4 mit Python 2.6 und verwende loaddata statt syncdb. Irgendwelche Ideen?

2voto

Sergio Morstabilini Punkte 2005

Ihre data.json-Datei ist in Ordnung, ich habe sie ausprobiert und sie funktioniert.

Sind Sie sicher, dass Ihre Datenbank mit Ihren Modellen synchronisiert ist?

Was führen Sie aus, um die Datei zu laden?

wie Luc vorgeschlagen hat, vergleichen Sie die Ausgabe von "manage.py dumpdata testapp" mit Ihrer Datei

1voto

user4382728 Punkte 21

Versuchen Sie, settings.py zu überprüfen, in meinem Fall habe ich einfach vergessen, app in INSTALLED_APPS hinzuzufügen

0voto

David Antaramian Punkte 4025

Ich bin mir nicht sicher, ob das überhaupt hilft, aber ich schaue mir gerade einige von mir geschriebene Fixtures an, und alle meine Modellbezeichner sind richtig geschrieben.

Hier ist ein Beispiel aus meiner Benutzerkontenvorrichtung, aber beachten Sie, dass es in YAML ist.

- model: auth.User
  pk: 4
  fields:
    username: avirtue
    first_name: Aurora
    last_name: Virtue
    is_active: true
    is_superuser: false
    is_staff: false
    password: sha1$90431$9347d343e94122f94f9f02988f026a76d339ab02
    email: avirtue@someschool.edu

- model: users.UserProfile
  pk: 4
  fields:
    user: 4
    school_id: 420985
    professor: false

Sie befindet sich in einer Datei im Ordner users/fixtures/ (d. h. es gibt eine Anwendung users, und diese Datei befindet sich im Ordner fixtures dieser Anwendung).

Wie Sie sehen können, kommen die Modelle von zwei verschiedenen Orten. Das zweite, das ich verwende, stammt aus der gleichen Anwendung und definiert eine UserProfile . Der erste ist eigentlich aus dem django.contrib.auth Modul, das das Projekt für die Authentifizierung verwendet.

0voto

user3713612 Punkte 9

Ich habe die gleiche Fehlermeldung "Invalid model identifier" mehrere Male gehabt und was ich immer erkannt habe ist, dass ich entweder einen falschen App-Namen verwende oder der App-Name falsch geschrieben ist. Nämlich "model": "testapp.article", die testapp ist entweder falsch geschrieben oder es wird ein anderer App-Name erwartet, nicht testapp wie im obigen Fall.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X