django从另一个没有ForeignKey的模型填充模型字段

时间:2020-05-27 18:29:50

标签: python django django-models django-rest-framework

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

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')

2 个答案:

答案 0 :(得分:0)

我需要在最新的项目中执行此操作,并且创建了一个字典,在其中放置了要返回的值。因此,在您的情况下:

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)

答案 1 :(得分:0)

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

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')