我有两个模型之间的多个领域:
class userProfile(models.Model):
boughtCoupons = models.ManyToManyField(Coupon, through='UserCoupons')
class UserCoupons(models.Model):
user = models.ForeignKey(userProfile)
coupon = models.ForeignKey(Coupon)
date = models.DateField()
class Coupon(models.Model):
name = models.CharField(max_length=10)
现在我的问题是:
根据优惠券和用户ID,我如何获得用户购买优惠券的日期?
像mycoupon.boutcoupons.filter(user=userid)
这样的东西,然后以某种方式得到日期..
问题是该字段属于用户...如果我从用户访问该字段,我会得到一张优惠券列表,但没有日期。
我只需要coupon-userID .date值。
答案 0 :(得分:6)
直接查询UserCoupons。
UserCoupons.objects.get(user=myuser, coupon=mycoupon)
或使用优惠券的反向关系:
mycoupon.usercoupon_set.get(user=myuser)
编辑以回应评论此处有两个单独的内容。首先,ManyToMany 作为一个集合(实际上是一个Manager)添加到另一侧 - 使用源模型的名称加上_set
。因此,在这种情况下,Coupon
将具有userprofile_set
属性。
其次,然而,你会发现这不是我在答案中使用的。这是因为ForeignKeys还为其目标模型添加了反向关系管理器。您的直通模型将ForeignKeys定义为userProfile和Coupon,因此它们都获得usercoupons_set
个属性。
答案 1 :(得分:0)
我知道这个问题已经很老了,但是我为解决这些问题发布了最简单直接的答案,因为我本人为解决该问题而付出了很多努力,却找不到互联网的帮助,因此发布它来帮助像我这样的许多人。
Models.py
------------------------
class userProfile(models.Model):
boughtCoupons = models.ManyToManyField(Coupon, through='UserCoupons')
class UserCoupons(models.Model):
user = models.ForeignKey(userProfile)
coupon = models.ForeignKey(Coupon)
date = models.DateField()
class Coupon(models.Model):
name = models.CharField(max_length=10)
View.py
-----------------
def result(request):
a = userProfile.objects.all()
b = Coupon.objects.all(name=a.boughtCoupons.all.0)
c = UserCoupons.objects.all(coupon=c.name.all.0)
context = {'a':a,'b':b,'c':c}
return render(request,'index.html',context)
intex.html
--------------------
*your Html declaration
* content
{%for dtl in c%}
<table>
<tr>
<th>coupon</th>
<th>UserID</th>
<th>Date</th>
</tr>
<tr>
<td>{{c.coupon}}</td>
<td>{{c.user}}</td>
<td>{{c.date}}</td>
</tr>
</table>