0

ここからorderedmodelを実装しようとしています: https://github.com/kirelagin/django-orderedmodel

しかし、それは DatabaseError で失敗しますException Value: no such column: qrgame_place.order

ドキュメントには、モデルにフィールドを含める必要があるとは書かれていないorderので、親クラスがそのフィールドを実装することになっていると思いますか? 【追記:そうです。やってみた…]

以下は、django ファイルからの重要なスニペットの一部です。

# models.py

import hashlib
import random
from django.db import models
from orderedmodel import OrderedModel


class Place(OrderedModel):
    name = models.CharField(max_length=100)
    clue = models.CharField(max_length=300)
    code = models.CharField(max_length=7, editable=False)

    def __unicode__(self):
        return self.name

    def save(self):
        # Need a secret identifier for url. Using a hashed name (which
        # is also secret until found. So no need to obscure more)
        if not self.id:
            hashsrc = self.name.encode('utf-8')
            self.code = unicode(hashlib.sha1(hashsrc).hexdigest()[:7])
        super(Place, self).save()



# admin.py

from django.contrib import admin
from qrgame.models import Place
from orderedmodel import OrderedModelAdmin


class PlaceAdmin(OrderedModelAdmin):
    list_display = ['name', 'clue', 'reorder']

admin.site.register(Place, PlaceAdmin)



# settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'orderedmodel',
    'qrgame',
)

これを実装しpython manage.py syncdbた後に実行しました。

何が問題なのですか?(Django のバージョンは (1, 4, 1, 'final', 0) です)

4

1 に答える 1

2

syncdb現在、既存のテーブルを変更することはできません。次のことができます。

  • テーブルを手動で削除してから実行するsyncdb
  • 実行manage.py reset qrgameしますが、qrgame アプリのすべてのデータが失われます
  • Southなどの既存の django db migration ソリューションを使用する
  • テーブルに列を手動で追加します(ヒント:manage.py dbshelldb REPLが表示されます。列定義はから取得できますmanage.py sqlall qrgame
  • dumpdataおよびloaddataコマンドは、スキーマ変更の間に既存のデータを保存および復元するのに役立ちます
于 2012-12-25T12:26:46.943 に答える