В дополнительных полях Django для дополнительных полей мы можем добавить дополнительные поля в качестве кода ниже (от https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany), мой вопрос: как я могу получить дополнительные поле легко, возможно ли напрямую не запрашивать в промежуточной таблице? ТОЧНО пример:получить дополнительное значение поля в отношениях «многие ко многим» Django
>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="Paul McCartney")
>>> beatles = Group.objects.create(name="The Beatles")
>>> m1 = Membership(person=ringo, group=beatles,
... date_joined=date(1962, 8, 16),
... invite_reason="Needed a new drummer.")
>>> m1.save()
>>> beatles.members.all()
[<Person: Ringo Starr>]
>>> p = beatles.members.all()[0]
>>> p
[<Person: Ringo Starr>]
Я хочу, чтобы получить date_joined значение р, я знаю, что это может быть сделано
>>> Membership.objects.get(person=p, group=beatles).date_joined
datetime.date(1962, 8, 16)
но можно получить его просто так же, как:
>>> p.xxx(*args)
=============== models.py ================
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self): # __unicode__ on Python 2
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __str__(self): # __unicode__ on Python 2
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Можете ли вы подробнее остановиться на том, как вы хотите получить доступ к этому? Например, вы ищете контекст в представлении, который вернет дату, когда текущий пользователь присоединился к какой-либо группе, в которой они находятся? Я спрашиваю, потому что ваше использование 'p' в вопросе меня сбивает с толку. Следуя примеру, вы дали ответ, просто будет 'p.date_joined'. –
не точно, нет доступного p.date_joined, так как поле date_joined находится в таблице Membership (для каждого Person оно может иметь несколько записей и несколько значений date_joined, поскольку оно может объединяться с несколькими группами), таблица Person записывает только имя человека. – vts