/ hajj / scratchcard / 2 /处的AttributeError-“函数”对象没有属性“对象”-

时间:2019-06-05 10:25:30

标签: django django-forms django-views

我有一个名为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 :(得分:0)

函数的名称与模型的名称相同。因此,这意味着函数中的ScratchCard指代函数,而不再指代模型。

您可以通过将功能重命名为scratch_card来解决此问题,例如:

def scratch_card(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 style guidelines也建议这样做。类以 CamelCase 编写,而函数和属性通常以 lower_case_with_underscores 编写。

您还需要更新urls.py,因为重命名该功能还意味着重写标识符,否则这些标识符将指向不存在的视图。实际上,这些URLS随后将指向模型对象。