首页 文章

在Django中使用动态模型名称和字段查询sql

提问于
浏览
0

我是Django的新手,并且正在努力解决一些动态解决方案 . 我正在尝试创建一个应用程序,用户可以从UI创建表并从平面文件将数据导入此表,然后用户可以通过单击URL浏览该数据(例如,如果用户为员工创建表,则用户应该能够为员工提供这样的URL:localhost / employee) . 我稍后会处理导入部分但是现在,我正在尝试找到一种浏览数据的解决方案 . 以下查询几乎是这样做的 . 但我无法使用别名而不是列名 . 有没有办法 Build 像这样的动态?

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

    根据this ticket,django不允许序列化非模型字段 . 所以,你需要覆盖serailizer,所以你可以尝试这样:

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

    # 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)
    

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

    # inside views.py
    from .custom_serializer import CustomSerializer
    
    def employee(request):
       ...
       json_data = CustomSerializer().serialize(
          entries
          fields = (
            'First_Name',
            'email'
          )
    

相关问题