OperationalError: (1054, “'field list' 中的未知列 'time_table.id'”)

Chr*_*las 3 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 |
+---------------+--------------+------+-----+-------------------+-----------------------------+
Run Code Online (Sandbox Code Playgroud)

我通过以下方式获得了这张表的模型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'),)
Run Code Online (Sandbox Code Playgroud)

A 有一个简单的序列化程序:

class TimeSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Time
        fields = ('data', 'source', 'source_origin', 'sys_updated') 
Run Code Online (Sandbox Code Playgroud)

还有一个简单的view

class TimeList(generics.ListAPIView):
    """ Retrieves all data. """
    queryset = Time.objects.all()
    serializer_class = TimeSerializer
Run Code Online (Sandbox Code Playgroud)

当我尝试从以下位置访问它时,例如localhost:8765/time/,我收到以下错误:

OperationalError: (1054, "Unknown column 'time.id' in 'field list'")
Run Code Online (Sandbox Code Playgroud)

我的问题:是否可以在没有 id 的情况下为 django rest 提供一张桌子?我不想在我的桌子上添加一个 id。

我在野外找到了一些答案,但没有帮助。

Iva*_*hev 5

从文档:

每个模型只需要一个字段来具有 primary_key=True (显式声明或自动添加)。

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

所以恐怕答案是否定的。如果对您有用,您可以尝试在其他字段之一上设置 primary_key=True ..