Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:foreignkey值与get()方法_Python_Ajax_Django - Fatal编程技术网

Python Django:foreignkey值与get()方法

Python Django:foreignkey值与get()方法,python,ajax,django,Python,Ajax,Django,我需要知道如何使用get方法获取foreignkey字段的值,而不是ID 我将查询集作为JsonResponse从视图发送到模板。一个特定的实例信息,所以我使用get方法 def TareaDetailView(request): ID = request.POST.get('id') tareas_todas = Tareas.objects.values() tarea = tareas_todas.filter(pk=ID).get() return Js

我需要知道如何使用get方法获取foreignkey字段的值,而不是ID

我将查询集作为JsonResponse从视图发送到模板。一个特定的实例信息,所以我使用get方法

def TareaDetailView(request):
    ID = request.POST.get('id')
    tareas_todas = Tareas.objects.values()
    tarea = tareas_todas.filter(pk=ID).get()

    return JsonResponse({'tarea': tarea})
我在浏览器中获取信息,但字段名从empresa更改为empresa_id,例如

这是具有原始字段名的我的模型

class Tareas(models.Model):
    creador = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
    destinatario = models.ForeignKey(User,  related_name='destinatario',  blank=True, null=True, on_delete=models.CASCADE)
    titulo = models.CharField(max_length=100, blank=True, null=True)
    tarea = models.TextField(max_length=500, blank=True, null=True)
    resuelto = models.BooleanField(default=True)
    fecha_creacion = models.DateField(default=datetime.date.today, blank=True, null=True)
    fecha_limite = models.DateField(default=datetime.date.today, blank=True, null=True)
    fecha_resuelto = models.DateField(default=datetime.date.today, blank=True, null=True)
    empresa = models.ForeignKey("Contactos", blank=True, null=True,                                        on_delete=models.CASCADE)
    persona_empresa = models.ForeignKey("Personas", blank=True, null=True,                                     on_delete=models.CASCADE)
这就是我可以在浏览器控制台上查看的内容

tarea:
    creador_id: 1
    destinatario_id: 1
    empresa_id: 6
    fecha_creacion: "2019-03-10"
    fecha_limite: "2019-03-15"
    fecha_resuelto: "2019-03-10"
    id: 210
    persona_empresa_id: 3691
    resuelto: false
    tarea: "Habrá que hacer alguna cosa maravillosa."
    titulo: "Esta es una tarea de prueba"
这是我用来获取数据并在模板中显示的Ajax

<script>
   $(function(){
        $('.show_tarea').on('click', function (e) {
            e.preventDefault();
            let tarea_id = $(this).attr('id');

            $.ajax({
                url:'/catalog/tareas-detail/',
                type:'POST',
                data: $('#form_tarea_'+tarea_id).serialize(),
                success:function(response){
                    console.log(response);
                    $('.show_tarea').trigger("reset");
                    openModal(response);
                },
                error:function(){
                    console.log('something went wrong here');
                },
            });
        });
    });

    function openModal(tarea_data){
        $('#creador').text(tarea_data.tarea.creador_id);
        $('#destinatario').text(tarea_data.tarea.destinatario_id);
        $('#titulo').text(tarea_data.tarea.titulo);
        $('#tarea').text(tarea_data.tarea.tarea);
        $('#resuelto').text(tarea_data.tarea.resuelto);
        $('#fecha_creacion').text(tarea_data.tarea.fecha_creacion);
        $('#fecha_limite').text(tarea_data.tarea.fecha_limite);
        $('#fecha_resuelto').text(tarea_data.tarea.fecha_resuelto);
        $('#empresa').text(tarea_data.tarea.empresa_id);
        $('#persona_empresa').text(tarea_data.tarea.persona_empresa_id);
        $('#modal_tareas').modal('show');
    };
</script>
首先:我想知道如何获得foreignkey值而不是id。 第二:为什么文件名在变化?这是jsonresponse所做的事情


谢谢

字段名没有改变,实际上就是这样


实际上,您正试图将值用于它不打算做的事情。如果您想序列化一个模型实例及其相关项,您应该查看Django REST Framework的序列化程序,它可以实现这一点和更多功能。

您只获得id,因为在数据库中只保存外部元素的id

如果希望通过AJAX传输值,则必须检索并将其添加到结果中。例如:

def TareaDetailView(request):
ID = request.POST.get('id')
tareas_todas = Tareas.objects.values()
tarea = tareas_todas.filter(pk=ID).get()

empresa = Contactos.objects.get(id=tarea.empresa.id) 

return JsonResponse({'tarea': tarea,
                     'empresa': empresa})

这是一个非常麻烦的方法。如果您的所有函数都返回JSON,而您不使用Djangos前端,那么这将非常合适。

您必须将数据存储在某个dict或来自foreignkey的JSON中。像

my_json = {
    "creador_name": tarea.creador.name,
    "creador_mobile_number": tarea.creador.mobile_number,
    "destinatario" :tarea.destinatario.something,
    "titulo": tarea.titulo,
    "tarea": tarea.tarea,
    "resuelto":tarea.resuelto,
    ......
    so on
    } 

现在传递它,返回JsonResponse{'tarea':my_json}

Perfect。谢谢