AttributeError в / hajj / scratchcard / 2 / - у объекта 'function' нет атрибута 'objects' - - PullRequest
1 голос
/ 05 июня 2019

У меня есть модель с именем ScartchCard, в которую я ввел PIn и серийный номер.Тем не менее, пользователь вводит PIN-код и серийный номер в форму.Я хочу, чтобы моя точка зрения подтвердила, что последовательный порт и выводы совпадают или выход в базе данных.Затем пользователь может перейти на другую страницу.

models.py

class ScratchCard(models.Model):
    user = models.OneToOneField(User, related_name='card', on_delete=models.CASCADE, blank=True, null=True)
    serial = models.CharField('Serial Number', max_length=50)
    pin = models.PositiveIntegerField("Card PIN")
    is_used = models.BooleanField(default=False)
    created_at = models.DateField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

views.py

 def ScratchCard(request, user_id):

        template_name = 'scratch_card.html'

        if request.method == "POST":
            pin = request.POST.get('pin')
            serial = request.POST.get('serial')
            print(pin)
            print(serial)

            person = ScratchCard.objects.get(pin=pin)
            print(person)



    return render(request, template_name)][1]

scratch_card.html

 <form method="post" class="form-element" novalidate>
                    {% csrf_token %}             



                    <label for="pin">PIN No:</label>
              <input type="text" name="pin" placeholder="pin">
    <label for="serial">Serial No:</label>
              <input type="text" name="serial" placeholder="serial">
    <input type="submit" name="" value="Login">




            </form>

1 Ответ

0 голосов
/ 05 июня 2019

Название вашей функции совпадает с названием вашей модели. Таким образом, это означает, что ScratchCard в вашей функции относится к вашей функции, не больше к вашей модели.

Вы можете исправить это, переименовав функцию в scratch_card, например:

def <b>scratch_card</b>(request, user_id):
    template_name = 'scratch_card.html'
    if request.method == "POST":
        pin = request.POST.get('pin')
        serial = request.POST.get('serial')
        print(pin)
        print(serial)

        person = ScratchCard.objects.get(pin=pin)
        print(person)
    return render(request, template_name)

Это также рекомендуется в соответствии с правилами PEP-8 . Классы написаны в CamelCase, тогда как функции и атрибуты обычно пишутся в lower_case_with_underscores.

Вам также потребуется обновить urls.py, поскольку переименование функции также подразумевает перезапись идентификаторов, которые в противном случае указывают на несуществующее представление. Фактически, эти URL-адреса будут вместо этого указывать на объект модели.

...