大家好,我在这里束手无策,我需要帮助做一个简单的连接之间的2表使用Django ORM。
最终目标是返回一个与datatable兼容的json响应,其中包含产品详细信息和产品类别名称,而不是类别id。
就像这样
{
"draw": 1,
"recordsTotal": 1,
"recordsFiltered": 1,
"data": [
{
"productid": 4,
"sku": "000001",
"shortcode": "CBG",
"category": 2,
"categoryname": "Burgers",
"productname": "Cheese Burger",
"description": "This is a cheese burger",
"barcode": "000001",
"treshhold": 10,
"isactive": true
}
]
}
这是我的模特
class ProductCategory(models.Model):
categoryid = models.AutoField(primary_key=True)
shortcode = models.CharField(max_length=10)
categoryname = models.CharField(max_length=50,unique=True)
isactive= models.BooleanField(default=True)
class Meta:
db_table="tblProductCategory"
class Product(models.Model):
productid = models.AutoField(primary_key=True)
sku = models.CharField(max_length=20,unique=True)
shortcode = models.CharField(max_length=10)
category = models.ForeignKey(ProductCategory, on_delete=models.SET_DEFAULT,default=0)
productname = models.CharField(max_length=50)
description = models.CharField(max_length=50)
barcode = models.CharField(max_length=20)
treshhold = models.IntegerField()
isactive= models.BooleanField(default=True)
class Meta:
db_table="tblProduct"
我的观点
def get_product(request):
recordsTotal = 0
draw = int(request.GET['draw'])
start = int(request.GET['start'])
length = int(request.GET['length'])
products = Product.objects.filter(sku__icontains = request.GET['sku']).select_related('category')
recordsTotal = products.count()
recordsFiltered = recordsTotal
page = start / length + 1
paginator = Paginator(products, length)
try:
object_list = paginator.page(page).object_list
except PageNotAnInteger:
object_list = paginator.page(draw).object_list
except EmptyPage:
object_list = paginator.page(paginator.num_pages).object_list
data = [model_to_dict(product) for product in object_list]
json_res={
"draw": draw,
"recordsTotal": recordsTotal,
"recordsFiltered": recordsFiltered,
'data':data,
}
return JsonResponse(json_res);
我的序列化器
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model =Product
fields = '__all__'
使用序列化器似乎是正确的方法。但我真的不明白它们是如何工作的,也不知道如何实施。
3条答案
按热度按时间bvuwiixz1#
您应该能够访问
products[index].category.categoryname
处的类别名称。gkn4icbw2#
你可以尝试:
鉴于此:
pxy2qtax3#
如果您没有获取类别表的数据,即Ctaegory name你可以试着一个接一个地取
例如: