Django获取对象外键

时间:2018-09-07 16:20:16

标签: django

我有一个名为userprofile的对象,该对象有一个城市(“ ciudad”)字段。我正在尝试使用current_user.ciudad来获取它,但是收到一条错误消息“不存在匹配的查询”。追溯:http://dpaste.com/2BMH8EG

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    current_user = self.request.user.userprofile
    print(current_user.ciudad)
    return context

我的模特看起来像这样

class Ciudad(models.Model):
    ciudad = models.CharField(max_length=500)

    def __str__(self):
        return self.ciudad

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    nombre = models.CharField(max_length=250, default=".")
    apellido = models.CharField(max_length=250, default=".")
    email = models.CharField(max_length=250, default="error")
    telefono = models.IntegerField(default=0)
    ciudad = models.ForeignKey(Ciudad, default=0, on_delete=models.SET_DEFAULT)
    is_productor = models.BooleanField(default=False)
    is_nodo = models.BooleanField(default=False)

    def __str__(self):
        return str(self.user)

2 个答案:

答案 0 :(得分:3)

错误回溯

  

不存在匹配查询。
  文件   “ C:\ Users \ Gonzalo \ Desktop \ webdevtests \ django4 \ biodem_dj \ firstpage \ views.py”   在get_context_data中     69.打印( current_user.ciudad

错误消息是不言自明的。当前用户为self.request.user.userprofile,并且没有任何对应的Ciudad。
发生此错误的原因是您删除了某些UserProfile对象引用的Ciudad对象。由于您在ciudad = models.ForeignKey(Ciudad, default=0, on_delete=models.SET_DEFAULT)中有UserProfile Model。因此,现在所有引用到您删除的Ciudad对象的UserProfile对象现在都指向ID为0的Ciudad对象,并且您的数据库中没有任何ID = 0的Ciudad对象。

答案 1 :(得分:0)

print(current_user.ciudad_id)

检查上面的代码是否打印0(默认值),也许您没有为当前用户设置密码