尝试执行 INNER Join 并在 API 上显示结果
Trying to do an INNER Join and display the result on the API
之前有人问过这个问题,但我不能对我的案例使用任何答案。
我正在尝试具有与此等效的功能,以便在 API 上显示结果。
SELECT denom_name,retail_name,retail_adr
FROM denomination d INNER JOIN Retailer r
ON r.id = d.retailer.id
这些是我的模型 (models.py):
class Retailer(models.Model):
retail_name = models.CharField(max_length=30)
retail_addr = models.CharField(max_length=300,null=True)
def __str__(self):
return self.retail_name
class Denomination(models.Model):
denom_name = models.CharField(max_length=1000)
retailer = models.ForeignKey(Retailer, on_delete=models.CASCADE)
我已经在 views.py
上创建了一个视图集
class DenomRetailViewset(viewsets.ModelViewSet):
queryset = Denomination.objects.select_related('Retailer')
serializer_class = DenomRetailSerializer
但这就是问题所在,至少是其中之一。
我正在通过 serializer.py
创建序列化器
class DenomRetailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model= retailer,denomination
fields = ('denom_name','retail_name','retail_adr')
但是如您所见,序列化程序不能接受两个模型。此外,我对视图集有疑问,queryset = Denomination.objects.select_related('Retailer')
。
任何提示都非常受欢迎,因为我开始失去理智。
谢谢。
使用source
--DRF doc参数
class DenomRetailSerializer(serializers.HyperlinkedModelSerializer):
<b>retail_name = serializers.CharField(source='retailer.retail_name')
retail_adr = serializers.CharField(source='retailer.retail_adr')</b>
class Meta:
model = Denomination
fields = ('denom_name', 'retail_name', 'retail_adr')
另外,应该是.select_related(<b>'retailer'</b>)
而不是.select_related('Retailer')
在这种情况下您可以使用“深度”:
class DenomRetailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model= denomination
fields = ('denom_name','retail')
depth = 1
响应将 return 像这样的内部连接:
{
"id": 1,
"denom_name ": "...",
"retail": {
"id" : 1,
"retail_name" : "...",
"retail_addr" : "..."
}
}
之前有人问过这个问题,但我不能对我的案例使用任何答案。
我正在尝试具有与此等效的功能,以便在 API 上显示结果。
SELECT denom_name,retail_name,retail_adr
FROM denomination d INNER JOIN Retailer r
ON r.id = d.retailer.id
这些是我的模型 (models.py):
class Retailer(models.Model):
retail_name = models.CharField(max_length=30)
retail_addr = models.CharField(max_length=300,null=True)
def __str__(self):
return self.retail_name
class Denomination(models.Model):
denom_name = models.CharField(max_length=1000)
retailer = models.ForeignKey(Retailer, on_delete=models.CASCADE)
我已经在 views.py
上创建了一个视图集class DenomRetailViewset(viewsets.ModelViewSet):
queryset = Denomination.objects.select_related('Retailer')
serializer_class = DenomRetailSerializer
但这就是问题所在,至少是其中之一。
我正在通过 serializer.py
创建序列化器class DenomRetailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model= retailer,denomination
fields = ('denom_name','retail_name','retail_adr')
但是如您所见,序列化程序不能接受两个模型。此外,我对视图集有疑问,queryset = Denomination.objects.select_related('Retailer')
。
任何提示都非常受欢迎,因为我开始失去理智。
谢谢。
使用source
--DRF doc参数
class DenomRetailSerializer(serializers.HyperlinkedModelSerializer):
<b>retail_name = serializers.CharField(source='retailer.retail_name')
retail_adr = serializers.CharField(source='retailer.retail_adr')</b>
class Meta:
model = Denomination
fields = ('denom_name', 'retail_name', 'retail_adr')
另外,应该是.select_related(<b>'retailer'</b>)
而不是.select_related('Retailer')
在这种情况下您可以使用“深度”:
class DenomRetailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model= denomination
fields = ('denom_name','retail')
depth = 1
响应将 return 像这样的内部连接:
{
"id": 1,
"denom_name ": "...",
"retail": {
"id" : 1,
"retail_name" : "...",
"retail_addr" : "..."
}
}