Django ImageField получить имя пользователя

models.py

   def upload_to(instance, filename):
        return 'verify/%s/%s' % (instance.user_idx.username, filename)
    
    class UserVerifyImg(models.Model):
        user_idx = models.ForeignKey(
            User,
            db_column='user_idx',
            on_delete=models.CASCADE
      )
        business_type = models.CharField(max_length=255)
        image = models.ImageField(upload_to=upload_to)
        upload_date = models.DateTimeField(auto_now = True)
    
        class Meta:
            managed = False
            db_table = 'account_user_verify'

Это моя модель. Но она показывает мне ошибку.

account.models.UserVerifyImg.user_idx.RelatedObjectDoesNotExist: UserVerifyImg не имеет user_idx.

Я не понимаю, в чем проблема. Помогите мне, пожалуйста.

Выполняли ли вы миграции после изменений в вашей модели?

python manage.py makemigrations

Тогда:

python manage.py migrate

Вы действительно используете правильный запрос instance.user_idx.username проблема в том, что в то время, когда вы назначаете путь к изображению (upload_to), экземпляр не создан, а значит, вы не можете получить instance.user_idx.username вот почему вы получаете это исключение.
Для решения этой проблемы вы можете создать foreignkey, сделав примерно следующее.

class UserVerifyImg(models.Model):
    user_idx = models.ForeignKey(
                User,
                db_column='user_idx',
                on_delete=models.CASCADE
          )
    business_type = models.CharField(max_length=255)
    upload_date = models.DateTimeField(auto_now = True)
        
    class Meta:
        managed = False
        db_table = 'account_user_verify'


def upload_to(instance, filename):
    return 'verify/%s/%s' % (instance.user_verify_img.user_idx.username, filename)

class Image(models.Model):
    user_verify_img = models.ForeignKey(UserVerifyImg,on_delete=models.CASCADE)
    image = models.ImageField(upload_to=upload_to)
  1. run python manage.py makemigrations
  2. run python manage.py migrate

Обратите внимание, что вам нужно изменить вашу форму и ваши представления, чтобы это работало, если вам нужна дополнительная помощь, дайте мне знать

Вернуться на верх