我使用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/