Django不使用ForeignKey从另一个模型填充模型字段

2024-09-27 04:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在应用程序中使用退出的多个数据库(我无法修改它们)。我连接到所有这些模型,可以毫无问题地进行查询和序列化,但我想将一个字段从一个模型填充到另一个模型中,它们具有相同的值:

class Cuisines(models.Model):
    name = models.CharField(max_length=255)
    company_id = models.PositiveIntegerField()
    ...

    class Meta:
        managed = False
        db_table = 'cuisines'
        in_db = 'db_2'

class Companies(models.Model):
    company_name = models.CharField(max_length=255)
    location = models.CharField(max_length=255, blank=True, null=True)
    ....
    class Meta:
        managed = False
        db_table = 'cuisines'
        in_db = 'db_1'
        ...

视图:

def cuisines(request): 
    companies = Companies.objects.all()
    for company in companies:
        result = Cuisines.objects.filter(company_id = company.id )
        serializer = OrderSerializer(result, many=True)
        return JSONResponse(serializer.data)

结果如下:

[{"id":1,"name":"Burger",company_id:"1" ...]

我正在寻找:

[{"id":1,"name":"Burger","company_id":"some name", }...]

更新: 序列化程序

class OrderSerializer(serializers.ModelSerializer):

    class Meta:
        model = Cuisines
        fields = ('id','name','company_id')

Tags: namein模型idtruedbmodelslength
2条回答

我需要在我的最新项目中这样做,并且我已经创建了一个字典,在其中我将要返回的值放入其中。因此,在你的情况下:

result = []
for i in Cusiness.objects.all():
    d = {}
    company = Companies.objects.get(id = i.company_id)
    d["name"] = i.name
    d["company_id"] = company.name
    ...
    result.append(d)

首先,您需要连接视图中的实例

def cuisines(request): 
    companies = Companies.objects.all()
    for company in companies:
        result = list(Cuisines.objects.filter(company_id=company.id))
        for o in result:
            setattr(o, 'company', company)
        serializer = OrderSerializer(result, many=True)
        return JSONResponse(serializer.data)

序列化程序

class OrderSerializer(serializers.ModelSerializer):
    #eg. custom company_name field
    company_name = serializers.CharField(read_only=True, source='company.company_name')

    class Meta:
        model = Cuisines
        fields = ('id','name','company_name')

相关问题 更多 >

    热门问题