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