[英]Django Rest Framework, display data from a table referenced with a foreign key
[英]Acces data from other table - Foreign Key in Django Rest Api - Unknown column
我使用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)
在這種情況下,您可以讓一位擁有者擁有許多車輛。
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.