Django создать раскрывающийся список из модели базы данных и сохранить в другой модели - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в Django и Python и хотел бы попробовать следующее. Создайте раскрывающийся список из данных в модели и сохраните данные в другой модели. Однако каждый раз, когда я отображаю форму, она недействительна и не отображает шаблон, любая помощь будет принята с благодарностью. Пожалуйста, помогите, где я иду не так.

Models.py:

class Part(models.Model):
    category = models.TextField(default = ' ')

    def __str__(self):
        """String for representing the Model object."""
        return self.category


class UserItem(models.Model):
    name= models.CharField(max_length = 50, null=True)
    category = models.ForeignKey(Part, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        """String for representing the Model object."""
        return self.category

Forms.py:

class DropDown(forms.ModelForm):
    name = forms.CharField()
    parts = forms.ModelChoiceField(queryset=Part.objects.values_list('category', flat=True).distinct())

    class Meta:
        model = UserItem
        fields = ('name', 'category',)

Views.py:

def index(request):
    query_results = Part.objects.all()
    #part_list = DropDown()
    if request.method == 'POST':
        form = DropDown(request.POST)
        if form.is_valid():
            form.save()
            return render(request,'index.html', {'query_results': query_results }, {'form': form } )

    else:
        print("invalid")
        print (DropDown.errors)
        form = DropDown()
    return HttpResponseRedirect(reverse('genre_create') )

1 Ответ

0 голосов
/ 05 марта 2020

В вашем views.py обновите последний оператор возврата до ниже-

return render(request, "index.html", 
    {'form': form, 'query_results': query_results})

Вы можете проверить здесь

Вы можете на самом деле избавиться от else block -

def index(request):
    query_results = Part.objects.all()
    if request.method == 'POST':
        form = DropDown(request.POST)
        if form.is_valid():
            form.save()
            return render(request,'index.html', {'query_results': query_results }, {'form': form } )

    form = DropDown()
    return render(request, "index.html", 
        {'form': form, 'query_results': query_results})

И только потому, что вы уже создали form в своем коде python, вам не нужно писать html s для select и других тегов. Эту ссылку можно указать в параметрах рендеринга формы.

...