Django Formset: фильтр множественного выбора не работает для моего набора форм после многих попыток - PullRequest
0 голосов
/ 24 января 2019

У меня есть модель Конкурсанта, которая имеет отношение один к одному с категорией.Я хочу, чтобы создатель премии имел доступ только к последним 15 категориям премии, которую он создал в образцовой модели участника.То есть, набор запросов с несколькими выборами в поле (категория) Конкурсанта покажет только список из последних 15 категорий, созданных в модели категорий.Я предпринял разные попытки, но код либо не работает, либо выдает сообщение [['ManagementForm data отсутствует или повреждено с ошибкой'] '.

Я произвел бесчисленное множество повторных разложений кодов и попытался найти решения, найденные в Интернете.Но они не работали.

# MY CATEGORY MODEL

class Category(models.Model):
    award = models.ForeignKey(Award, on_delete=models.CASCADE)
    award_category = models.CharField(max_length=150, blank=True, null=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    def __str__(self):
    return self.award_category


# MY CONTESTANT MODEL

class Contestant(models.Model):
    award_name = models.ForeignKey(Award, on_delete=models.CASCADE)
    contestant_name = models.CharField(max_length=150, null=True, blank=True )
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='contestants')
    vote = models.IntegerField()

    def number_of_vote(self):
        return Contestant.objects.filter(self.vote).count()
    vote_count = property(number_of_vote)


#MY VIEW

def get_award(request, pk):
    new_award = get_object_or_404(Award, pk=pk)
    Contest_Formset = modelformset_factory(Contestant, fields('contestant_name', 'category',), extra=15)
    formset = Contest_Formset(request.POST)
    for form in formset:
        form.fields['category'].queryset = Category.objects.filter(user=request.user)[1:15]
        if request.method == 'POST' and form.is_valid():
            myform = form.save(commit=False)
            myform.award_name = new_award
            myform.save()
            return redirect('award_details', pk=new_award.pk)
    else:
        formset = Contest_Formset()

    context = {
    'new_award': new_award,
    'formset': formset
}

    return render(request, 'voting/get_award.html', context)



# TEMPLATE

<form action=" " method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ formset.management_form }}
    {{ formset }}
    <input type="submit" value="save">

</form> 

Я ожидаю, что вывод поля категории участника покажет только последние 15 категорий, созданных пользователем для входа в систему.

...