2016-05-31 14 views
1

私は、次の表ではDjangoで作成されていないレガシーデータベースを持っている:OperationalError:(1054、「『フィールドリスト』で不明な列 『time_table.id」』)

$ describe `time`; 
+---------------+--------------+------+-----+-------------------+-----------------------------+ 
| Field   | Type   | Null | Key | Default   | Extra      | 
+---------------+--------------+------+-----+-------------------+-----------------------------+ 
| data   | varchar(16) | NO | MUL | NULL    |        | 
| source  | varchar(255) | NO |  | NULL    |        | 
| source_origin | varchar(128) | YES |  | NULL    |        | 
| sys_updated | timestamp | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+---------------+--------------+------+-----+-------------------+-----------------------------+ 

私は、このモデルを取得しますinspectdbによってテーブル:

class TimeSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Time 
     fields = ('data', 'source', 'source_origin', 'sys_updated') 

とシンプル:

class Time(models.Model): 
    data = models.ForeignKey('a_table', models.DO_NOTHING) 
    source = models.CharField(max_length=255) 
    source_origin = models.CharField(max_length=128, blank=True, null=True) 
    sys_updated = models.DateTimeField() 

    class Meta: 
     managed = False 
     db_table = 'time' 
     unique_together = (('data', 'source_origin'),) 

Aは、単純なシリアライザを持っています:

class TimeList(generics.ListAPIView): 
    """ Retrieves all data. """ 
    queryset = Time.objects.all() 
    serializer_class = TimeSerializer 

私はからこれをアクセスしようとすると、のは言わせ、localhost:8765/time/が、私は次のエラーを取得しています:

OperationalError: (1054, "Unknown column 'time.id' in 'field list'") 

私の質問: は、それがテーブルを持っているかのうですdjango restにはIDなしで? テーブルにIDを追加したくありません。

野生ではanswersが見つかりましたが、役に立たなかったです。ドキュメントから

+0

Ivanが述べているように、Djangoは各モデルに主キーが必要です。 [この回答](http://stackoverflow.com/a/33085716/113962)は、 'values()'を使って回避することを提案しました。しかし、通常のクエリーセットではなく、 'values()'を使うように残りのフレームワークシリアライザを変更することが可能かどうかはわかりません。 – Alasdair

答えて

3

Each model requires exactly one field to have primary_key=True (either explicitly declared or automatically added).

https://docs.djangoproject.com/en/1.9/topics/db/models/#automatic-primary-key-fields

だから私は答えはノーです怖いです。それがうまくいくならば、他のフィールドの1つでprimary_key = Trueを試してみてください。

+0

これは良い解決策ではありませんが、動作している他のフィールドの1つに 'primary_key = True'を追加すると –

関連する問題