Django - ошибка Null Integrity не позволяет выполнить POST
Ошибка, которую я получаю при попытке POST, следующая:
django.db.utils.IntegrityError: null value in column "interest_category_id" of relation "teamStart_project" violates not-null constraint
Вот мои сериализаторы:
class InterestSerializer(serializers.ModelSerializer):
class Meta:
model = Interests
fields = ('id', 'interest_name')
class ProjectsSerializer(serializers.ModelSerializer):
interest_category = serializers.StringRelatedField()
class Meta:
model = Project
fields = (
'project_title',
'project_description',
'interest_category',
'created_at',
'updated_at',
)
Вот мои модели:
class Interests(models.Model):
interest_name = models.CharField(max_length=50)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.interest_name
class Project(models.Model):
project_title = models.CharField(max_length=255)
project_description = models.TextField(max_length=1500)
interest_category = models.ForeignKey(Interests, on_delete=models.CASCADE)
created_by = models.ForeignKey(User, related_name='projects', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "Project name:" + "\n" + self.project_title + "\n" + "|" + "\n" + "Created By:" + "\n" + self.created_by.username
Я могу избавиться от ошибки, удалив interest_category = serializers.StringRelatedField()
, но проблема в том, что если я не удалю эту строку, фронтенд покажет ID interest_category
, а не соответствующее имя. Например, вот что будет показано во фронтенде:
With this line: interest_category = serializers.StringRelatedField()
--------------------------------------------------------------------
Project Title: TestItem1
Project Description: TestItem1Desc
Interest Category: Django
Without the line:
---------------------------------------------------------------------
Project Title: TestItem1
Project Description: TestItem1Desc
Interest Category: 1
Когда у меня есть interest_category = serializers.StringRelatedField()
, я могу получить правильное String Related name, которое мне нужно отобразить, но я получаю ошибку NullIntegrity, утверждающую, что столбец "interest_category_id"
нарушает ограничение not-null.
interest_category
Как я могу получить имя элемента, чтобы отобразить элемент, не беспокоясь об ошибке NullIntegrity в строке interest_category = serializers.StringRelatedField()
.
измените это interest_category_name = serializers.StringRelatedField()
на
interest_category = serializers.SerializerMethodField()
и добавьте следующую функцию к вашему ProjectsSerializer
def get_interest_category_name(self, instance):
return instance.interest_category.interest_name
и затем добавьте "interest_category_name"
в ваш fields
из ProjectsSerializer
. Это решит вашу проблему.