python - 从其他表访问数据 - Django Rest Api 中的外键 - 未知列

标签 python mysql django django-rest-framework foreign-keys

我使用inspectdb从现有MySQL数据库创建了Django Rest模型。我有两个模型,我想从其他模型访问一些数据。

我的模型:

class Impreza(models.Model):
    year = models.IntegerField()
    tytul = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = '2006_impreza'

class Description(models.Model):
    year = models.IntegerField()
    year_id = models.IntegerField()
    id_imprezy = models.IntegerField(blank=True, primary_key=True)

    class Meta:
            managed = False
            db_table = '2006_description'

我的序列化器:

class ImprezaSerializer(serializers.ModelSerializer):
    desc = serializers.StringRelatedField(many=True)

    class Meta:
        model = Impreza
        fields = ('year', 'tytul', 'desc')

我的问题是 Django 正在搜索名为“impreza_id”的 id,但它存在其他名称 -“id_imprezy”。正如你所看到的,我试图给 'id_imprezy' 一个 'primary_key=True' 来告诉 Django 这是正确的名称,但它不起作用。它仍然给我错误:(1054,“'字段列表'中的未知列'2006_description.impreza_id'”)

在我的数据库中,两个表都有 id,但它没有显示在模型中。我读到 Django 没有在模型中显示 id 列。

我怎样才能做对呢?如何添加外键? 抱歉,我对 Django 还很陌生;-)

最佳答案

在序列化器中,您引用model = Impreza:

...
class Meta:
    model = Impreza
    fields = ('year', 'tytul', 'desc')

您正在引用 Impreza 类,该类实际上具有字段 'year''tytul'Impreza 类还包含一个名为 impreza_id 的变量。由于您的序列化程序正在寻找 Impreza 中的项目,而不是 Description,因此 Django 会被勾选并告诉您它找不到 impreza_id

但是,更改您引用的类并不能解决您的问题。如果您希望建立一对多关系,则可以使用 ForeignKey

class Description(models.Model):
    year = models.IntegerField()
    impreza = models.ForeignKey(Impreza, on_delete=models.CASCADE)

所有这些都表明,我会考虑完全不同的架构。您正在构建一个非常具体的类,它可以很好地模块化和可重用。考虑这样做:

class Vehicle(models.Model):
    year = models.PositiveSmallIntegerField()
    make = models.CharField(max_length=64)
    model = models.CharField(max_length=64)
    description = models.CharField(max_length=1024)

一对多关系的可靠用例:

class Owner(models.Model):
    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)
    age = models.PositiveSmallIntegerField()

class Vehicle(models.Model):
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
    year = models.PositiveSmallIntegerField()
    make = models.CharField(max_length=64)
    model = models.CharField(max_length=64)
    description = models.CharField(max_length=1024)

在这种情况下,您可以让一位车主拥有多辆车辆。

干杯!

关于python - 从其他表访问数据 - Django Rest Api 中的外键 - 未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53771424/

相关文章:

javascript - Django:如何将模板变量分配给 View 变量?

Django 1.7 - makemigrations 不创建初始迁移

python - 用Python用图片训练SVM

python - 如何在 numpy ndarray 中获取每行的 N 个最大值?

python - pip在python3.6上安装Django

mysql - 使用 mysql 在 nodejs 中进行事务管理

python - 如何强制 `setup.py test` 将依赖项安装到我的 `virtualenv` 中?

c# - 从 c# 连接到 mysql 给我空异常

php - 从服务器上每个数据库的一个表中选择数据

python - Django 是在服务器上还是在浏览器中执行脚本?