Получить значение из формы django и использовать для поиска данных в sql - PullRequest
0 голосов
/ 28 февраля 2020

Я хочу, чтобы пользователь вставил имя в форму, и после отправки программа переходит в БД, находит определенные значения для этого указанного c имени и возвращает его пользователю. Этот view.py не работает. Как я могу заставить это работать и быть в состоянии obj идентифицировать идентификатор, основанный на вставленном имени и go и найти определенные значения c?

  view.py


def home(request):

        if request.method == 'POST':
              form=PersonForm(request.POST)
              if form.is_valid():
                  form1=form.save(commit=True)
                  name=form1.name


                obj=School.objects.get(id=1)


                context={
                            'name':name,
                            'object':obj
                            }
                return render(request, 'first/results.html', context)

         else:
             form = PersonForm()
            return render(request, 'first/search.html', {'object':obj})

models.py

class School(models.Model):
    student=models.CharField(max_length=200)
    schgroup=models.CharField(max_length=200)

    class Meta:
        managed=False
        db_table='school'


class Person(models.Model):
    name= models.CharField(max_length=150)

forms.py

class PersonForm(forms.ModelForm):
    name = forms.CharField(max_length=150, label='',widget= forms.TextInput)
    class Meta:
        model = Person
        fields = ('name',)

Не могли бы вы мне помочь. Буду рад любой помощи и советам.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Вы можете попробовать это:

def home(request):

        if request.method == 'POST':
              form=PersonForm(request.POST)
              if form.is_valid():
                  form1=form.save(commit=True)
                  name=form1.name


                obj=School.objects.get(student=name)


                context={
                            'object':obj
                            }
                return render(request, 'first/results.html', context)

         else:
             form = PersonForm()
            return render(request, 'first/search.html', {'object':obj})

и в шаблоне:

{{object.name}}

{{object.schgroup}}
1 голос
/ 28 февраля 2020

Если я правильно понял вопрос, вы sh попросите пользователя ввести имя, а затем вы хотите найти соответствующие записи о персонах и вернуть их в шаблон

В этом случае вам не нужно сохранить как, поскольку это создает запись Person и может просто сделать это

def home(request):
    if request.method == 'POST':
        form = PersonForm(request.POST)
        context = dict(form=form, name="", people="", obj=School.objects.get(id=1))
        if form.is_valid():
            context['people'] = Person.objects.filter(name=form.cleaned_data['name'])

        return render(request, 'first/results.html', context)

    else:
        form = PersonForm()
        return render(request, 'first/search.html', {'form': form})

Затем в шаблоне вы можете получить доступ к форме, используя {{ form }}, который, передав ее обратно после публикации, вы можете отобразить любую форму ошибки. В этом примере вы можете использовать people в шаблоне для доступа к набору запросов результатов поиска.

EG

{% for person in people %}
    ID: {{ person.pk}}<br>
    Name: {{person.name }}
    {% if not forloop.last %}<br>{% endif %}
{% endfor %}

Я использую .filter, а не .get, так как вы этого не делаете имеют уникальное ограничение на модель Person, поэтому может быть несколько записей с одним именем

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