使用Django中的动态模型名称和字段从SQL查询

时间:2018-12-08 21:35:16

标签: python json django

我是Django的新手,正在努力寻求一些动态解决方案。我正在尝试创建一个应用程序,使用户可以从UI创建表并将数据从平面文件导入此表,然后用户可以通过单击url浏览该数据(例如,如果用户为雇员创建表,则用户应该能够为雇员提供这样的网址:localhost / employee)。稍后,我将处理导入部分,但现在,我正在尝试找到一种浏览数据的解决方案。下面的查询几乎可以做到这一点。但是我不能使用别名而不是列名。有什么办法可以建立类似动态的东西吗?

def employee(request):
    entries = Employee.objects.annotate(First Name=F('FirstName')). only('FirstName','Email')
    print(entries)
    return render_to_response('employee.html',{'employees': serializers.serialize("json",entries, fields=('First Name','Email'))}) 

以上查询给我以下结果。我这里只有电子邮件信息。因此没有名字,因为注释不起作用。

[{"model": "client.employee", "pk": 1, "fields": {"Email":"employe1@gmail.com"}}]

1 个答案:

答案 0 :(得分:0)

根据this ticket,django不允许序列化非模型字段。因此,您需要覆盖Serailizer,这样您可以尝试:

将自定义序列化程序(将覆盖原始json序列化程序)写入一个单独的文件,即 custom_serializer.py

String name = nameField.getText();
Team team = (Team) teamComboBox.getSelectedItem();

// I only want this to run, if the team doesn't already have a coach
Coach coach = new Coach(name, team);

在视图内部,导入该CustomSerializer并使用它。例如

# custom_serializer.py

from django.core.serializers.json import Serializer

class CustomSerializer(Serializer):

    def end_object(self, obj):
        for field in self.selected_fields:
            if field == 'pk' or field=='id':  # primary key field
                continue
            elif field in self._current.keys():
                continue
            else:
                try:
                    self._current[field] = getattr(obj, field)
                except AttributeError:
                    pass
        super(CustomSerializer, self).end_object(obj)