Я совершенно новичок в Django rest framework.
Это мой models.py
class Comments(models.Model):
Blog_key = models.ForeignKey(Blog, on_delete = models.CASCADE)
user_key = models.ForeignKey(User, on_delete = models.CASCADE)
comment_content = models.TextField(blank = True, null=True)
time_Commented = models.TimeField(auto_now_add = True)
У меня есть блог, и я пытаюсь добавить к нему комментарии, используя ajax
Мой serializers.py выглядит примерно так
from django.contrib.auth import get_user_model
from rest_framework import serializers
from .models import Comments, Blog
User = get_user_model()
class UserDisplaySerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'username',
]
class BlogDisplaySerializer(serializers.ModelSerializer):
class Meta:
model = Blog
fields = [
'title',
]
class CommentsModelSerializer(serializers.ModelSerializer):
user_key = UserDisplaySerializer(read_only=True)
Blog_key = BlogDisplaySerializer(read_only=True)
class Meta:
model = Comments
fields = [
'user_key',
'Blog_key',
'comment_content',
]
Как мы видим, у меня есть идентификатор блога в модели с внешним ключом с моделью блога.
Итак, Чтобы сохранить комментарий, мне нужен идентификатор пользователя comment_content и идентификатор блога.
Мой views.py выглядит так
class CommentsCreateAPIView(generics.CreateAPIView):
serializer_class = CommentsModelSerializer
def perform_create(self, serializer):
serializer.save(user_key=self.request.user) #Here I can get user Id
Мой вопрос: как получить идентификатор блога, я могу получить идентификатор пользователя и может удалить ошибку. Но я не могу удалить ошибку. «Пустое значение в столбце« Blog_id »нарушает ненулевое ограничение»
Это очевидно, у меня нет идентификатора блога.
Теперь моя часть шаблона. Я не занимался проектированием, но вот это
<form method="POST" id="CommentAjax">
{% csrf_token %}
<input type="text" name="comment_content"><br>
<input type="hidden" name="Blog_key" value="{{ object.id}}">
<input type="submit" value="Comment">
</form>
Я скрыл идентификатор блога и, показывая данные блога (т. Е. Заголовок, детали и прочее), передал идентификатор, думая, что могу использовать его в представлениях .py, как в представлении на основе функций, мы можем получить данные, написав request.POST ['Blog'].
Но это не сработало. Но теперь я знаю, почему это не сработало. Поэтому мой вопрос заключается в том, как установить идентификатор блога?
моя ajax функция на всякий случай
$("#CommentAjax").submit(function(event){
alert("sending")
event.preventDefault();
var this_ = $(this)
var formData = this_.serialize()
$.ajax({
url: "{% url 'CommentSave' %}",
data: formData,
method: "POST",
success: function(data){
console.log(data)
fetchComments()
},
error: function(data){
console.log("error")
console.log(data)
}
})
})
Хотя сейчас я не использую ajax, так как сейчас я прямо иду чтобы связать блог / Comment-Save
, как в urls.py Я написал путь ('Comment-Save', CommentsCreateAPIView.as_view (), name = 'CommentSave'),
I didn ' Не знаю, что искать для этой проблемы, я пробовал разные вещи, но не получил правильного ответа, так что вот, простите меня, если это дубликат.