Я хочу, чтобы удобный удобный атрибут выполнял следующие действия:
from django.contrib.auth.models import User
user = User.objects.get(id=2)
user.company
<Company: Big Company L.L.C>
В настоящее время я решаю эту проблему с помощью лямбды.В поисках ответа похоже, что, возможно, «правильный» способ решить эту проблему - использовать types.MethodType
, но я никак не могу разобраться с этим.Да, я прочитал Раймонд отличное руководство , но я явно что-то упускаю .. Вот мое текущее решение для тех, кто заинтересован ..
# Defined Elsewhere
class User:
name = models.CharField(max_length=32)
class Company(models.Model):
users = models.ManyToManyField(User, related_name="companies", blank=True, null=True)
# Here is the meat of this..
class UserProfile(models.Model):
"""This defines Users"""
user = models.OneToOneField(User)
def get_company(self):
try:
companies = self.user.companies.all()[0]
except (AttributeError, IndexError):
return None
User.company = property(lambda u: UserProfile.objects.get_or_create(user=u)[0].get_company())
Прямо сейчас это работает .. Но есть ли лучший способ - я не в восторге от лямбд ?? ?? 1011 *