我有一个名为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>
答案 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随后将指向模型对象。