django manytomany - 从中​​获取价值

时间:2011-05-16 15:21:31

标签: python django django-models

我有两个模型之间的多个领域:

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值。

2 个答案:

答案 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>