我的模型中有一个方法has_related_object
,需要检查相关对象是否存在
class Business(base):
name = models.CharField(max_length=100, blank=True, null=True)
def has_related_object(self):
return (self.customers is not None) and (self.car is not None)
class Customer(base):
name = models.CharField(max_length=100, blank=True, null=True)
person = models.OneToOneField('Business', related_name="customer")
但我收到错误:
Business.has_related_object()
RelatedObjectDoesNotExist:业务没有客户。
答案 0 :(得分:107)
使用hasattr(self, 'customers')
避免异常检查为recommended in Django docs:
def has_related_object(self):
return hasattr(self, 'customers') and self.car is not None
答案 1 :(得分:43)
这是因为ORM必须转到数据库检查customer
是否存在。由于它不存在,因此会引发异常。
您必须将方法更改为以下内容:
def has_related_object(self):
has_customer = False
try:
has_customer = (self.customers is not None)
except Customer.DoesNotExist:
pass
return has_customer and (self.car is not None)
我不知道self.car
的情况,所以如果需要,我会留给你调整它。
旁注: 如果您在具有ForeignKeyField或OneToOneField的模型上执行此操作,则可以执行以下操作以避免数据库查询。
def has_business(self):
return self.business_id is not None
答案 2 :(得分:0)
您之前可能在调试时创建了用户并且没有配置文件,所以即使现在编码自动化之后,他们仍然没有配置文件尝试在您的 signal.py 文件中尝试以下代码,然后创建一个超级用户,以身份登录超级用户,然后从那里添加第一个帐户的个人资料。这对我有用...
@receiver(post_save, sender=User, dispatch_uid='save_new_user_profile')
def save_profile(sender, instance, created, **kwargs):
user = instance
if created:
profile = UserProfile(user=user)
profile.save()