Как решить ошибку Django 'django.db.utils.IntegrityError: NOT NULL constraint failed: myapi_article.author_id'
Я пытаюсь создать фиктивный новостной сайт для изучения django.
Я сталкиваюсь с указанной ошибкой при выполнении POST-запроса для создания новой статьи, которая связана с зарегистрированным пользователем через foreignKey author.
Пользователи обрабатываются с помощью JWT на передней стороне.
Я застрял на этом уже несколько дней и не знаю, где искать ответы.
Вот сериализаторы:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'password', 'email']
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
class ArticleSerializer(serializers.ModelSerializer):
author= UserSerializer(read_only=True)
class Meta:
model = Article
fields = '__all__'
#read_only_fields = ['author']
Вот соответствующий вид:
class ArticleCreateView(generics.ListCreateAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
permission_classes = (IsAuthenticated,)
def perform_create(self, serializer):
serializer.save(author=self.request.user)
и вот соответствующая модель:
class Article(models.Model):
headline = models.CharField(max_length=200)
subtitle = models.CharField(max_length=300)
section = models.CharField(max_length=200, blank=True, null=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='articles')
body = models.TextField()
#pub_date = models.DateTimeField(auto_now_add=True, blank=True, null=True)
endorsements = models.IntegerField(default=0, blank=True, null=True)
def __str__(self):
return self.headline
Я знаю, что могу установить для поля author значение null/blank и заглушить ошибку, но это не решит проблему, поскольку статьи все равно не будут привязаны к пользователям.
Я также видел несколько предложений удалить все миграции и перестроить базу данных. Я пробовал это сделать, но ничего не вышло.
Любая помощь очень ценится!
edit: full traceback below