我有问题aobut Django的ORM与功能Ajax请求:Django的ORM问题与AJAX
select_related
我有这样的查询:
prod_serv = Product_service.objects.select_related()
当我加入3 models
与外键related_name
。 简单的Django的for循环,我可以提取值如下:
{% for x in a %}
<td><label class="form-checkbox form-normal form-primary "><input type="checkbox" checked=""></label></td>
<td class="hidden-xs">{{ x.product_code }}</td>
<td class="hidden-xs">{{ x.name }}</td>
<td class="hidden-xs">{{ x.description }}</td>
<td class="hidden-xs">{{ x.selling_price }}</td>
<td class="hidden-xs">{{ x.unit_id }}</td>
<td class="hidden-xs">{{ x.category_id.type_id }}</td>
{% endfor %}
最importan部分是:
- x.category_id.type_id
- x.unit_id
在哪里我可以访问值相关的名称。 例子:
车型
class Product_service(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
selling_price = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
purchase_price = models.DecimalField(decimal_places=5, max_digits=255, blank=True, null=True)
description = models.CharField(max_length=255, blank=True, null=True)
image = models.FileField(upload_to="/", blank=True, null=True)
product_code = models.CharField(max_length=255, blank=True, null=True)
product_code_supplier = models.CharField(max_length=255, blank=True, null=True)
product_code_buyer = models.CharField(max_length=255, blank=True, null=True)
min_unit_state = models.CharField(max_length=255, blank=True, null=True)
state = models.CharField(max_length=255, blank=True, null=True)
vat_id = models.ForeignKey('VatRate', related_name='vat_rate')
unit_id = models.ForeignKey('Units', related_name='unit_value')
category_id = models.ForeignKey('Category', related_name='product_services')
def __str__(self):
return self.name
class Units(models.Model):
id = models.AutoField(primary_key=True)
unit_name = models.CharField(max_length=255)
def __str__(self):
return self.unit_name
class VatRate(models.Model):
id = models.AutoField(primary_key=True)
rate = models.CharField(max_length=255)
description = models.CharField(max_length=255)
def __str__(self):
return self.rate
class CategoryType(models.Model):
id = models.AutoField(primary_key=True)
type = models.CharField(max_length=255)
def __str__(self):
return self.type
class Category(models.Model):
id = models.AutoField(primary_key=True)
type_id = models.ForeignKey('CategoryType')
name = models.CharField(max_length=255)
def __str__(self):
return str(self.name)
for循环赛普尔做everthin正确的,但我想用Ajax做到这一点。所以当我发送这个查询到ajax我不能提取像循环中的值。
views.py
@login_required
@csrf_protect
def ajax_request(request):
prod_serv = Product_service.objects.select_related()
if request.is_ajax():
mega = serializers.serialize('json', prod_serv)
return HttpResponse(mega, 'json')
我不知道我在我在此查询其发送给阿贾克斯做错了。有没有其他的方式来从模型中提取字段值给ajax?
也许这对您来说更加方便JSON-ify prod_serv Queryset作为列表列表,并只将您需要的值转换为JSON?类似于'prod_serv = Product_service.objects.values_list('category_id__type_id','unit_id')',然后'mega = serializers.serialize('json',list(prod_serv))' –