1 回答
TA贡献1820条经验 获得超10个赞
您的个人资料模型通过user_profile相关名称与您的用户模型相关,因此查询它的正确方法是:
...
if product in request.user.user_profile.merchandise.all():
...
如果出于任何原因要重命名此关系,则:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile')
然后,您的merchandise关系是一对一的,因此它将返回一个对象,而不是一个集合,不需要全部:
...
if product in request.user.user_profile.merchandise:
...
您可以在此处进行的一项改进是,由于商品是另一个对象,因此该查找将再次访问数据库,以查看商品是否存在。为了节省您的数据库命中率,可以使用Profile自动字段merchandise_id来读取保存在Profile表中的信息:
...
if product in request.user.user_profile.merchandise_id:
...
每个关系(ForeignKey,ManyToMany和OneToOne)都会在转发模型中创建这些自动字段,因此可以轻松地查询相关对象是否存在而不必调用它。
我知道您很难理解Django ORM的所有概念,因此我建议您通读本文档页面,它涵盖了成功Django项目的所有不同关系和概念。
添加回答
举报
