vendor.product_set.count()
Когда ты создаёшь FK(Vendor) для модели Product, Django создаёт обратную связь (менеджер) для модели Vendor, имя по-умолчанию - имямодели_set. Изменяется переопределением related_name. Например:
class Product(models.Model):
vendor = models.ForeignKey(Vendor, related_name='products')
При таком коде ты сможешь обращаться к продуктам так:
some_vendor.products.all()
Раз это менеджер, для него доступны все те же действия, что и для стандартного (objects):
some_vendor.products.filter(key=value)
some_vendor.products.create(your=params) # Создаст продукт с уже заполненым полем vendor=some_vendor
Следует отметить, что если у модели два FK на одну модель, то related_name переопределить придётся, иначе появляется двусмысленность:
class Message(Model):
sender = ForeignKey(User)
recipient = ForeignKey(User)
text = TextField()
При таком коде, если ты хочешь получить, например, сообщения, которые отправил/получил user, совершенно неясно, что нужно писать, поэтому нужно либо отключить обратную связь (related_name='+'), либо предоставить её:
class Message(Model):
sender = ForeignKey(User, related_name='sent_messages')
recipient = ForeignKey(User, related_name='received_messages')
text = TextField()