【问题标题】:How do I return objects' attributes in Django?如何在 Django 中返回对象的属性?
【发布时间】:2014-11-29 06:09:03
【问题描述】:

我正在使用 Django 开发一个友谊系统,我正在使用以下模型:

class Friendship(models.Model):
  sender = models.ForeignKey(User, related_name='friendship_sender')
  receiver = models.ForeignKey(User, related_name='friendship_receiver')
  status = models.IntegerField(max_length=1)
  created_at = models.DateTimeField(auto_now=True)
  class Meta: 
    unique_together = ["sender", "receiver"]

当我尝试以这种方式获取所有状态为“0”的待处理请求时:

def friendship_pending(request):
  to_user = User.objects.get(fb_user_id=request.session['fb_user_id'])
  pending_requests = (Friendship.objects.filter(receiver=to_user, status='0'))
  data = serializers.serialize('xml', pending_requests, fields=('sender'))
  return HttpResponse(json.dumps(data))

我只得到对象“发送者”的编号,而不是它的所有属性。我想得到的是用户(在这种情况下是发件人)对象的字段,例如“名称”和“fb_user_id”。如果我不指定字段“发件人”,我仍然会得到带有时间戳的对象编号。

【问题讨论】:

    标签: python django django-models foreign-keys django-views


    【解决方案1】:

    如果你想要用户属性,你应该查询那个,而不是 Friendships。

    User.objects.filter(friendship_sender__receiver=to_user, friendship_sender__status='0')
    

    【讨论】:

    • friendship_sender_receiver 是什么意思? Friendship 类有一个发送者和一个接收者。我的目标是让所有对象“发件人”,即用户的外键,显示姓名、姓氏和身份证。当我第一次查询 Friendship 时,我得到了发件人,但是我不知道如何查询 User 以获取所有应该在 pending_request.sender 中的数据。
    • 用户有一个属性friendship_sender,因为那是Friendship.sender的相关名称。友谊有一个属性receiver。双下划线是跨连接查询的方式。
    • 好的,这更有意义,但是我也如何进行连接呢?我的意思是在这种情况下我收到一个错误,因为用户没有状态字段,它是友谊的。
    • "无法将关键字 'friendship_sender_status' 解析为字段。选择有:friendship_receiver、friendship_sender" 仍然无法将“关键字解析为字段”。
    • 发送者和状态之间需要两个下划线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2014-03-15
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多