I have django Student
model like below
class Student(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
score = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return f"Student(id: {self.id}, name: {self.name}, salary: {self.score})"
I have created some users in database also below is django shell
output
>>> s = Student.objects.create(name="erik", score=90)
>>> print(s)
Student(id: None, name: erik, salary: 90) # <----- here is showing id None
>>> Student.objects.all()
<QuerySet [<Student: Student(id: 1, name: alex, salary: 40.00)>, <Student: Student(id: 2, name: john, salary: 60.00)>, <Student: Student(id: 3, name: erik, salary: 90.00)>]>
when i have called Student.objects.all()
then it is showing id.
I want to get id
from s
variable because i am performing unit testing like below.
class GetSingleStudentTest(TestCase):
def setUp(self):
Student.objects.create(name="student1", score=50)
Student.objects.create(name="student2", score=55)
Student.objects.create(name="student3", score=80)
Student.objects.create(name="student4", score=36)
def test_get_single_student(self):
# get API response
response = client.get(reverse("student-detail", kwargs={"pk" : self.student2.pk }))
# get data from db
student = Student.objects.get(pk=self.student2.pk)
serializer = StudentSerializer(student)
self.assertEqual(response.data, serializer.data)
So when i have tried to access self.student2.pk
it is None
like we saw in django shell
also. So how can i get that id
?
because as i know Model.objects.create
creates a user and also save into database then why id
is None
here? I am learning from this guide https://realpython.com/test-driven-development-of-a-django-restful-api/ but they not showed this kind of issues that's why I asked here. I have used setUpTestData
method also but same kind of issue is there.
I think AutoField
is working perfectly. Is it same as IntegerField
but i have specified primary_key=True
.
Thank you.