操作错误:(1054,"未知栏' time_table.id'在'字段列表'")

时间:2016-05-31 10:06:44

标签: mysql django django-rest-framework

我有一个遗留数据库,不是由django创建的,具有下表:

$ 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 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 TimeSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Time
        fields = ('data', 'source', 'source_origin', 'sys_updated') 

一个简单的view

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'")

我的问题: 有没有id的django休息桌是否可行? 我不想在我的桌子上添加身份证。

我在野外发现了一些answers,但没有帮助。

1 个答案:

答案 0 :(得分:3)

来自doc:

  

每个模型只需要一个字段即可使primary_key = True(或者   明确声明或自动添加)。

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

所以我担心答案是否定的。您可以尝试在其中一个字段上设置primary_key = True,如果这对您有用..