从其他表访问数据-django rest api中的外键-未知列

ct2axkht  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(430)

我用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\u id'的id,但它与其他名称一起存在-'id\u imprezy'。如您所见,我试图给'id\u imperzy'一个'primary\u key=true'来告诉django这是正确的名称,但它不起作用。它仍然给我错误:(1054,“字段列表”中的未知列“2006\u description.impreza\u id”)。
在我的数据库中,两个表都有id,但它没有显示在模型中。我听说django在模型中没有显示id列。
我怎么才能做对呢?如何添加外键?抱歉,但我对django真的很陌生;-)

rvpgvaaj

rvpgvaaj1#

在序列化程序中,您正在引用 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)

在这种情况下,您可以让一个车主拥有多辆车。
干杯!

相关问题