Как сделать так, чтобы форма (forms.Form) возвращала экземпляр класса а не его __str__?

Есть функция, которая генерирует кортеж выборов для формы:

def gen_shopday_choices():
    choices = []
    for i in ShopDay.objects.all():
        choices.append((i, i.__str__()+'str'))
    return tuple(choices)

Функция возвращает: ((<ShopDay: День покупок 2020-05-24>, 'День покупок 2020-05-24str'), (<ShopDay: День покупок None>, 'День покупок Nonestr'))

Сама форма:

class ChooseShopDayForm(forms.Form):
    choices = gen_shopday_choices()
    main_shopday = forms.ChoiceField(widget=forms.RadioSelect, choices=choices)

На всякий случай модель:

class ShopDay(models.Model):
    date = models.DateField(null=True, blank=True)
    main = models.BooleanField(default=False)

    def __str__(self):
        return 'День покупок {}'.format(self.date)

    def get_absolute_url(self):
        return reverse('shop_day-detail', args=[str(self.id)])

    class Meta:
        verbose_name = 'День покупок'
        verbose_name_plural = 'Дни покупок'

А теперь к главному. При использовании формы в views "cleaned data" возвращает строку (__str__ объекта) а не сам объект. Как после валидации принимать не строку а сам объект?

Вот отрывок кода из views:

form = ChooseShopDayForm(request.POST)
    if form.is_valid():
        print(form.cleaned_data['main_shopday']) #печатает День покупок 2020-05-24
        msd = form.cleaned_data['main_shopday'].main #выдаёт ошибку 'str' object has no attribute 'main'

Ответы (0 шт):