django manytomany - получи ценность через - PullRequest
2 голосов
/ 16 мая 2011

У меня есть много полей между двумя моделями:

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)

Теперь моя проблема:

Учитывая купон и идентификатор пользователя, как я могу получить дату, в которую пользователькупил купон?
Что-то вроде mycoupon.boutcoupons.filter(user=userid), а затем получить дату как-то ..

Проблема в том, что поле принадлежит пользователю ... и если я получаю доступ к полю от пользователя, я получаюСписок купонов в любом случае, без даты.

Мне просто нужно значение coupon-userID .date.

Ответы [ 2 ]

6 голосов
/ 16 мая 2011

Просто запросите UserCoupons напрямую.

UserCoupons.objects.get(user=myuser, coupon=mycoupon)

или используйте обратную связь из Купона:

mycoupon.usercoupon_set.get(user=myuser)

Редактировать в ответ на комментарий Есть две разные вещиздесь происходитВо-первых, ManyToMany добавляет к другой стороне в виде набора (фактически, менеджера) - используя имя исходной модели плюс _set.Так что в этом случае Coupon будет иметь атрибут userprofile_set.

Во-вторых, однако, вы увидите, что это не то, что я использовал в своем ответе.Это связано с тем, что ForeignKeys также добавляют менеджеров обратной связи к своим целевым моделям.Сквозная модель определяет ForeignKeys для userProfile и Coupon, поэтому они оба получают атрибуты usercoupons_set.

0 голосов
/ 03 апреля 2019

Я знаю, что этот вопрос довольно старый, но я выкладываю самый простой и прямой ответ на такие проблемы, так как я сам изо всех сил пытался решить эту проблему и не нашел помощи в Интернете, поэтому разместил его, чтобы помочь многим, таким как я.

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>
...