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)
- run python manage.py makemigrations
- run python manage.py migrate
Обратите внимание, что вам нужно изменить вашу форму и ваши представления, чтобы это работало, если вам нужна дополнительная помощь, дайте мне знать