簡體   English   中英

從其他表訪問數據-Django Rest Api中的外鍵-未知列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM