AttributeError в / jobseeker / addkills объект списка не имеет атрибута jobseeker - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь использовать модель formset в Django. Однако у моей модели есть иностранный ключ, который я хочу использовать в форме request.user, чтобы помочь мне отследить человека, который сохраняет информацию. Я получаю эту ошибку.

@jobseeker_required
def add_skills(request):
    template_name = 'jobseeker/addskill.html'
    heading_message = 'Formset Demo'
    SkillFormSet = modelformset_factory(JobSeekerSkills, fields=('skill', 'level',))

    form = SkillFormSet()
    if request.method == 'POST':
        form = SkillFormSet(request.POST)
        a = form.save(commit=False)
        a.jobseeker = request.user.id
        a.save()

    return render(request, template_name, {'form': form})



class JobSeekerSkills(models.Model):


    LEVEL = (
        ('Beginner', 'Beginner' ),
        ('Intermediary', 'Intermediary'),
        ('Advance', 'Advance'),
    )


    jobseeker  = models.ForeignKey(User, on_delete=models.CASCADE)
    skill = models.CharField(max_length=255)
    level = models.CharField(max_length=25, blank=True, null=True, choices=LEVEL, default='Beginer') 
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

1 Ответ

0 голосов
/ 10 ноября 2019

modelformset_factory возвращает тип набора форм, поэтому SkillFormSet является типом набора форм, а не формой. Создание экземпляра вернет экземпляр формы. Кроме того, formset.save возвращает list экземпляров формы, а не одну форму - это источник ошибки, которую вы получаете.

Вам нужно перебрать список и добавить атрибут:

formset = SkillFormSet(request.POST)
forms = formset.save(commit=False)

for form in forms:
    form.jobseeker = request.user.id
    form.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...