Форма (или Formset?) Для обработки нескольких строк таблицы в Django - PullRequest
3 голосов
/ 18 ноября 2008

Я работаю над своим первым приложением Django. Короче говоря, для этого нужно отобразить список названий фильмов и позволить пользователям давать оценку (из 10) каждому фильму. Я смог использовать синтаксис {{form}} и {{formset}} в шаблоне для создания формы, которая позволяет оценивать один фильм за раз, что соответствует одной строке в таблице MySQL, но как это сделать? Я создаю форму, которая перебирает все названия фильмов в базе данных и создает форму, которая позволяет оценивать многие из них одновременно?

Сначала я думал, что это то, для чего были созданы наборы форм, но я не вижу способа автоматически перебирать содержимое таблицы базы данных, чтобы создавать элементы для перехода в форму, если вы понимаете, о чем я.

В настоящее время мой views.py имеет этот код:

def survey(request):
        ScoreFormSet = formset_factory(ScoreForm)
        if request.method == 'POST':
                formset = ScoreFormSet(request.POST, request.FILES)
                if formset.is_valid():
                        return HttpResponseRedirect('/')
        else:
                formset = ScoreFormSet()
        return render_to_response('cf/survey.html', {
                'formset':formset,
        })

И мой survey.html имеет это:

<form action="/survey/" method="POST">
<table>
{{ formset }}
</table>
  <input type = "submit" value = "Submit">
</form>

Да, и определение ScoreForm и Score из models.py:

class Score(models.Model):
        movie = models.ForeignKey(Movie)
        score = models.IntegerField()
        user = models.ForeignKey(User)

class ScoreForm(ModelForm):
        class Meta:
                model = Score

Итак, в случае, если вышеприведенное неясно, я собираюсь создать форму, в которой есть по одной строке на фильм, и в каждой строке отображается заголовок, а также есть поле, позволяющее пользователю ввести свой счет.

Если кто-нибудь может указать мне правильный подход к этому, я был бы очень признателен.

Ответы [ 2 ]

3 голосов
/ 18 ноября 2008

"Сначала я думал, что это то, для чего были созданы наборы форм, но я не вижу способа автоматически перебирать содержимое таблицы базы данных, чтобы создавать элементы для перехода в форму, если вы понимаете, о чем я. «

Вам необходимо получить набор запросов. И вам нужно предоставить этот набор запросов для вашей формы в качестве исходных данных. См. , используя исходные данные с набором форм для кода.

initial = [ list of { dictionaries }, one per form ] 

Интересно, что это прямая особенность API модели через метод values набора запросов.

0 голосов
/ 30 января 2009

Я нашел свой ответ, используя modelformset_factory вместо formset_factory, решает проблему, спасибо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...