Django ValueError: Невозможно присвоить * должен быть * экземпляр

Я получаю эту ошибку, но не знаю почему.

models.py

class Year(models.Model):
    year = models.CharField(max_length=5, unique=True)

    class Meta:
         ordering = ['-year']

    def __str__(self):
        return self.year

class Photo(models.Model):
    title = models.CharField(max_length=64)
    description = models.CharField(max_length=255)
    created = models.DateTimeField(auto_now_add=True)
    image = models.ImageField(upload_to='photos/')
    thumbnail = ResizedImageField(blank=True, size=[360, 360], force_format='JPEG', upload_to='thumbnails/')
    submitter = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    year = models.ForeignKey(Year, blank=True, on_delete=models.CASCADE)

views.py

def photo_create_view(request):
    form = AddPhotoForm()
    if request.method == 'POST':
        image = request.FILES['image']
        thumbnail = request.FILES['image']
        title = request.POST.get('title')
        description = request.POST.get('description')
        year = request.POST.get('year')
        people = request.POST.get('people')
        tags = request.POST.get('tags')
        photo = Photo(image=image, thumbnail=thumbnail, title=title, description=description, year=year,
        people=people, tags=tags, submitter=request.user,)
        photo.save()
        return redirect('/photo/?page=1')
    return render(request, 'photoapp/create.html', context={'form':form})

Невозможно присвоить значение "123": "Photo.year" должен быть экземпляром "Year". Я проверил таблицу Year и year.id 123 существует. Что я упускаю?

Это должен быть физический объект "Год"

year = Year.objects.get_or_create(year=request.POST.get('year'))

Примечания:

  • Вы также можете использовать .get() или .filter().first(), это должен быть объект, а не QuerySet
  • .
  • Если вы используете форму, вы можете обойтись только Pk в request.POST
  • .

Мое собственное мнение: я не думаю, что есть преимущество в том, чтобы иметь Year как отдельную таблицу, но, возможно, вы просто используете заполнители

year_id = int(request.POST.get('year'))
Photo(year_id=year_id, ...)
Вернуться на верх