Да кажем, че правя приложение за адресна книга.
class AddressBookEntry(models.Model):
address_book = models.ForeignKey(AddressBook)
name = models.CharField()
email = models.EmailField()
class User(models.Model):
name = models.CharField()
email = models.EmailField()
И двата обекта имат поле за имейл. Сега искам да намеря всички адресни книги, в които се появява даден потребител. Затова правя метод на User like
def entries(self):
return AddressBookEntry.objects.filter(email=self.email)
Това работи добре, но когато извличам няколко потребители, трябва да изпълня DB заявка веднъж на потребител. Бих искал да направя User.objects.all().prefetch_related('entries')
, но това не работи, тъй като entries
е метод, а не ForeignKey.
So-
- има ли начин по някакъв начин да кажа на django, че тук има връзка, без изрично да има поле много към много с неговата таблица чрез, така че да мога да използвам select_related?
- или има ли начин да направя JOIN между обектите, когато извличам потребителите (това би било кръстосано свързване според мен, но би било по-добре от това, което имам сега.)
email
вAddressBookEntry
M2M връзка сUser
? - person Selcuk   schedule 11.04.2014AddressBookEntry
се въвежда от потребителя, той може да въвежда имейл адреси на хора, които не са потребители на приложението. - person joerick   schedule 11.04.2014AddressBookEntries
към публикацията си. Защо имате и моделAddressBookEntries
, и моделAddressBookEntry
? Това изглежда странно. - person garbanzio   schedule 20.12.2014