【发布时间】:2021-08-09 14:52:52
【问题描述】:
我目前在我的数据库中有现有的表,这些表是按照通常的方式使用模型创建的(使用 makemigrations 和 migrate)。
现在,我希望合并这些现有表中的某些数据,而无需在我的数据库中创建新表。然后,我想对这些数据进行序列化,以便通过视图 API 对其进行访问。
我的理解是我创建了一个非托管模型来处理这个问题。我理解作为文档的一部分,您需要指定 managed = False 但这只是一个开始。到目前为止,我实际上只找到了一个链接(这不是很有帮助):https://riptutorial.com/django/example/4020/a-basic-unmanaged-table-
假设说,我在现有数据库的许多不同表中输入了用户信息,我想在我的新非托管模型中创建某些数据点,以将其组合到一个序列化程序中。到目前为止,这就是我想出的。请注意,在我的用户模型中,我不知道为 db_tables 参数指定什么,因为正如我所提到的,数据将来自许多不同的表,而不仅仅是一个。
用户模型
from django.db import models
class UserModel(models.model):
user = models.CharField(db_column="LABEL", max_length=255)
class Meta:
managed = False
db_table = "Sample_Table_1"
用户序列化器
from rest_framework import serializers
from models.user import UserModel
class UserSerializer(serializer.ModelSerializer):
class Meta:
model = UserModel
fields = "__all__"
用户视图集
from rest_framewirk.viewsets import ModelViewSet
from models.user import UserModel
from serializers.user import UserSerializer
class UserViewSet(ModelViewSet):
queryset = UserModel.objects.all()
serializer_class = UserSerializer
def list(self, request **kwargs):
return super(UserViewSet, self).list(request)
如果我想从db_table = "Sample_Table_1" 以外的其他表中获取另一个数据点,我该从哪里开始?例如,如果我想要来自 Sample_Table_2 表的数据?
我认为我的主要问题是我真的不知道非托管模型是如何工作的,以及我如何从数据库中已经存在的不同表中检索数据。如果有人可以向我指出可以帮助我的教程,那将是一个好的开始。
【问题讨论】:
-
您的数据库中已经存在表?参考这个docs.djangoproject.com/en/3.2/howto/legacy-databases
-
是的,我的数据库中已经存在表。例如,一个包含一堆当前用户信息的用户表。
-
您的 UserModel 似乎被命名为 UserDetails...?
-
抱歉,这是一个复制/粘贴错误。我已经更改了一些名称,因为我无法提及我正在使用的真实姓名。
-
@Adam,看起来您只需要常规序列化程序,而不是模型序列化程序,因为您从这些
managed=False模型中获得的唯一东西是列出您想要序列化的字段,而不是它?定义序列化器,使用 SerializerMethodFields 事情变得棘手,你根本不需要接触模型。
标签: python sql django django-models django-rest-framework