Как контролировать, связан ли объект с моделью или нет в Django?

#python-3.x #django #django-models #django-views

#python-3.x #django #django-модели #django-представления

Вопрос:

Существует несколько моделей, связанных с пользовательской моделью:

 class User(AbstractUser):
  # Its fields
  

 class Model_1(models.Model)
  user = models.OneToOneField('User', on_delete=models.CASCADE)
  # other fields
  

 class Model_2(models.Model)
  user = models.OneToOneField('User', on_delete=models.CASCADE)
  # other fields
  

 class Model_3(models.Model)
  user = models.OneToOneField('User', on_delete=models.CASCADE)
  # other fields
  

 class Model_4(models.Model)
  user = models.OneToOneField('User', on_delete=models.CASCADE)
  # other fields
  

и в представлении:

 def index(request):
    # If the user is related to model one, do something
    # If the user is related to model two, do something
    # If the user is related to model three, do something
    # If the user is related to model four, do something
    # Otherwise return to the home page
  

После того, как пользователь отправит запрос на просмотр, как мне определить, к какой из этих моделей он принадлежит?

Заранее благодарю.

Ответ №1:

Просто проверьте наличие вашей модели в экземпляре пользователя

 class Model_4(models.Model)
  user = models.OneToOneField('User',
                              related_name='model_4',
                              on_delete=models.CASCADE)

def index(request):
    if request.user.model_4 is not None:
        pass  # Do something
  

Комментарии:

1. Если при этом возникает ошибка AttributeError, вы всегда можете использовать hasattr or getattr с этим.