【问题标题】:Django-nonrel on AppengineAppengine 上的 Django-nonrel
【发布时间】:2014-09-11 02:16:50
【问题描述】:
class BillList(models.Model):
    username = models.ForeignKey(User)
    billno = models.CharField(max_length=15)


class OrderDetails(models.Model):
    billno = models.ForeignKey(BillList)
    orderdetails = models.TextField()

Userdjango.contrib.auth.models 中的那个。

我需要检索特定用户的所有billno。如何在 Appengine 上的 Django-nonrel 中执行这个简单的查询?

如果我这样做:

iq = User.objects.filter(username = "name1")
BillList.objects.filter(username = iq)

然后我得到一个错误:DatabaseError: Subqueries are not supported.

如果我马上试试这个BillList.objects.filter(username = "restaurant1"),那么ValueError: invalid literal for long() with base 10: 'restaurant1'

我相信一定可以进行这个简单的查询!任何解决方法?

【问题讨论】:

  • 我认为过滤器失败了,因为您没有将模型实例传递给它以进行过滤,而是传递一个作为模型一部分的字符串。尝试先获取代表“restaurant1”的模型,然后将该模型实例传递给过滤器。
  • 如果您看到我的第一个示例,那正是我第一次尝试的方式。我检索了与name1 对应的User 对象,然后尝试使用该对象过滤BillList。但似乎不支持这种类型的查询!
  • 不,这不是你所做的。您检索了与 name1 对应的用户的 查询集,并尝试使用该查询集进行过滤。但这不受支持。检索用户时使用get 而不是filter

标签: django google-app-engine django-nonrel


【解决方案1】:

其他的都是正确的。但是,您对ForeignKey 的理解可能存在根本问题。例如:

username = models.ForeignKey(User)

这根本不是真正的“用户名”。它是一个用户对象。更容易理解的是:

user = models.ForeignKey(User)

User 对象具有username 属性。所以要获取一个人的用户名,你会使用"

BillList.objects.get(billno = 12345).user.username

然后,您的查询变为:

iq = User.objects.get(username = "name1")
my_list = BillList.objects.all().filter(user = iq)

或者,更直接地:

my_list = iq.billist_set.all()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2014-07-24
    • 2011-10-31
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多