我对函数ajax请求aobut Django ORM有疑问:
select_related
prod_serv = Product_service.objects.select_related()
在这里,我使用与related_name有关的外键加入了3个模型.
在简单的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 %}
最重要的部分是:
> 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)
siple for loop做得非常好,但是我想用ajax做到这一点.因此,当我将此查询发送到ajax时,我无法提取for循环中的值.
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的错误.还有其他方法可以使用从模型中提取的字段将值发送到ajax吗?
解决方法:
每当使用Django和Ajax时,都应该考虑一个rest框架(如Django Rest Framework).手动滚动自己的ajax&端点正在重新发明轮子,而其他非常聪明的人已经为您开源了他们的代码.将框架与Ajax结合使用,可以使模型处理脱离Django请求-响应周期,并在浏览器中真正轻松地处理事情.
共有3个步骤:
>安装DRF并设置一些模型端点
>编写ajax请求以命中您的端点
>根据响应处理DOM.
示例模板:
template.html
{% block extra_js %}
<script type="text/javascript">
// Forgive the pseudocode, I have not run this.
// Uses jquery because everything does.
// For each item in an array, add it to a selected table in a new row
var do_dom_manipulation = function(data){
$.each(data, function(d){
$('table.mytable').append('<tr>'+d+'<tr>')
})
}
// Hit the rest endpoint to get data from the browser
$.ajax('api/models',
{
'name': 'foo'
}
).done(function(data) {
alert( "success" );
do_dom_manipulation(data)
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "complete" );
});
</script>
{% endblock extra_js %}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。