如何从视图访问django模型属性? [英] How can I access django model property from view?

查看:31
本文介绍了如何从视图访问django模型属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Django模型:

I have a django model:

class DebtRequest(models.Model):
    from_user = models.ForeignKey(User, related_name='debt_requests_from_user')
    to_user = models.ForeignKey(User, related_name='debt_requests_to_user')

    paying_user = models.ForeignKey(User, related_name='debt_requests_paying_user')
    receiving_user = models.ForeignKey(User, related_name='debt_requests_receiving_user')

    amount = models.FloatField()
    currency = models.CharField(max_length=10, default="USD")
    description = models.CharField(max_length=100, blank=True)
    date_incurred = models.DateTimeField(default=timezone.now)
    deadline = models.DateTimeField()
    payed = models.BooleanField(default=False)
    overdue = models.BooleanField(default=False)
    created = models.DateTimeField(default=timezone.now)

    @property
    def time_since_created(self):
        return (timezone.now() - self.created).total_seconds()

这是我的观点:

class ListDebtRequests(generics.ListAPIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, format=None):
        debt_requests_list = Debt.objects.requests(user=request.user)
        debt_requests_list_json = json.loads(serializers.serialize('json', debt_requests_list))

        debt_requests_json = [debt_requests_json_format(x, request.user.id) 
        for x in debt_requests_list_json]

        return JsonResponse(debt_requests_json, safe=False)

这是函数 debt_requests_json_format :

def debt_requests_json_format(x, user_pk):
    fields = x["fields"]
    # if == True --> Debt request addressed to current user.
    if fields["to_user"] == user_pk:
        return {"pk": x["pk"],
        "time_since_created": fields["time_since_created"],
        "created": fields["created"],
        "is_user_to_user": True,
        "current_user_pk": user_pk,
        "from_user": fields["from_user"],
        "from_user_first_name": User.objects.get(pk=fields["from_user"]).firstName,
        "from_user_last_name": User.objects.get(pk=fields["from_user"]).lastName,
        "paying_user": fields["paying_user"],
        "receiving_user": fields["receiving_user"],
        "amount": fields["amount"],
        "currency": fields["currency"],
        "payed": fields["payed"],
        "description": fields["description"],
        "date_incurred": fields["date_incurred"],
        "deadline": fields["deadline"],
        "overdue": fields["overdue"]}
    else: # if == False --> Debt request has been sent by current user.
        return {"pk": x["pk"],
        "created": fields["created"],
        "is_user_to_user": False,
        "current_user_pk": user_pk,
        "to_user": fields["to_user"],
        "to_user_first_name": User.objects.get(pk=fields["to_user"]).firstName,
        "to_user_last_name": User.objects.get(pk=fields["to_user"]).lastName,
        "paying_user": fields["paying_user"],
        "receiving_user": fields["receiving_user"],
        "amount": fields["amount"],
        "currency": fields["currency"],
        "payed": fields["payed"],
        "description": fields["description"],
        "date_incurred": fields["date_incurred"],
        "deadline": fields["deadline"],
        "overdue": fields["overdue"]}

我需要从此处理想地访问模型属性或将其传递给函数.

I need the model property to be accessed from within here ideally or pass it in to the function.

time_since_created属性返回自创建模型实例以来的时间(以秒为单位),但是我不知道如何从我的视图访问该时间.

The time_since_created property returns the time in seconds since the model instance was created, however I don't know how to access this from my view.

如何从我的视图访问此内容?

How can I access this from my view?

推荐答案

我尝试使用额外的字段为您的模型定义示例序列化器.这是非常简单的示例.

I try define an example serializer for your model with extra field. This is very simple example.

class DebtRequestSerializer(serializers.ModelSerializer):
    is_user_to_user = serializers.SerializerMethodField()
    current_user_pk = serializers.SerializerMethodField()
    time_since_created = serializers.IntegerField(source='time_since_created')
    to_user_first_name = serializers.CharField(source='to_user.firstName')

    class Meta:
        model = DebtRequest

    def get_is_user_to_user(self, obj):
        return obj.to_user == self.context.get('request').user.id

    def get_current_user_pk(self, obj):
        return self.context.get('request').user.id

更多详细信息:其余框架字段

这篇关于如何从视图访问django模型属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆