В вашей модели sample
нет поля name
, только firstname
, но проблема здесь , а не . Проблема в том, что ваши представления имеют то же имя , поэтому, если вы вызовете sample(..)
, он вызовет функцию view .
Обычно модели начинаются с U ppercase, хотя и не обязателен, он упрощает различие между названиями моделей и представлений . Таким образом, вы можете определить модели как:
from django.db import models
#Create your models here.
class <b>Problem</b>(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20)
title = models.CharField(max_length=30)
difficulty = models.CharField(max_length=10)
description = models.TextField()
solution = models.TextField()
code = models.TextField()
def __str__(self):
return self.name
class <b>Sample</b>(models.Model):
firstname = models.CharField(max_length=20)
email = models.EmailField()
rno = models.IntegerField(primary_key=True)
def __str__(self):
return self.firstname
В представлениях вы можете затем использовать модель с:
from .models import Problem, Sample
def problems(request):
name=request.POST['name']
title=request.POST['title']
difficulty=request.POST['example']
description=request.POST['description']
solution=request.POST['solution']
code=request.POST['code']
question = <b>Problem</b>.objects.create(
name=name,
title=title,
difficulty=difficulty,
description=description,
solution=solution,
code=code
)
return render(request,'thanks.html')
def sample(request):
name=request.POST['name']
email=request.POST['email']
rno=request.POST['rno']
a = <b>Sample</b>.objects.create(<b>firstname=name</b>,email=email,rno=rno)
return render(request,'example.html',{'name':name})
При этом, как правило, лучше использовать ModelForm
[Django -doc] (или, по крайней мере, Form
для обработки ввода), это делает его менее подверженным ошибкам и более удобным для обработки данных.
Примечание : в случае успешного запроса POST вы должны сделать redirect
[Django -doc] для реализации шаблона Post / Redirect / Get [wiki] . Это позволяет избежать того, чтобы вы выполняли тот же запрос POST, когда пользователь обновляет браузер.