Python 在django视图中为实例设置默认值
我使用简单的历史记录在我的模型上跟踪历史记录,效果很好。问题是,对模型所做的一些更改是由应用程序完成的,因此没有Python 在django视图中为实例设置默认值,python,django,Python,Django,我使用简单的历史记录在我的模型上跟踪历史记录,效果很好。问题是,对模型所做的一些更改是由应用程序完成的,因此没有历史记录\u用户,因此返回null。在这种情况下,我从API获得的结果如下。我正在尝试为那些有id的用户返回history\u用户的id,并将null设置为特定id,例如1。但我有点挣扎。我添加了一个函数get\u history\u user,在值为空时返回1。但是代码只是运行并返回初始结果,没有错误。这样行吗?我做错了什么 编辑 我已经设法使函数工作,它按预期返回1。但是返回发票历
历史记录\u用户
,因此返回null。在这种情况下,我从API获得的结果如下。我正在尝试为那些有id的用户返回history\u用户的id
,并将null设置为特定id,例如1。但我有点挣扎。我添加了一个函数get\u history\u user
,在值为空时返回1。但是代码只是运行并返回初始结果,没有错误。这样行吗?我做错了什么
编辑
我已经设法使函数工作,它按预期返回1。但是返回发票历史记录仍然返回空值,如下所示。我需要一些帮助来调整它,以便invoice\u history
从函数中选择history\u用户
,并将其附加到结果中
{
"history_id": 509,
"history_user": null,
"history_type": "+",
"history_date": "2021-05-03T16:17:53.558643+03:00",
"id": 976
}
Views.py
class AllHistoryView(APIView):
def get(自我、请求、格式=无):
all\u invhist=Invoice.history.all()
serializers=InvoiceHistorySerializer(all\u invhist,many=True)
尝试:
结果={}
res=serializers.data
#结果=res
发票_历史记录=res[0]
def获取历史记录用户(发票历史记录):
历史记录用户=发票历史记录[“历史记录用户”]
如果isinstance(历史用户,(浮点,int)):
返回用户的历史记录
返回1#使用1代替null
rez=获取历史记录用户(发票历史记录)#rez打印1
返回响应(发票历史记录,状态=状态。HTTP\u 200\u确定)
例外情况除外,如e:
错误=getattr(e,“消息”,repr(e))
打印(错误)
结果[“错误”]=错误
结果[“状态”]=“错误”
返回响应(结果,状态=status.HTTP\u 400\u错误请求)
从这里我可以看出,您似乎正在尝试获取第一个历史用户的id(如果存在)。您可以在不序列化和反序列化对象的情况下实现这一点
class AllHistoryView(APIView):
def get(自我、请求、格式=无):
inv_first=发票.history.all().first()
如果inv_first不是无:
返回响应(inv_first.history_user.pk)#默认状态码为200
其他:
返回响应(1,status=status.HTTP\u 400\u BAD\u请求)