Используя Django 2.0, у меня есть две модели post и group , в post есть ForeignKey , устанавливающая на группа . У меня есть подробное представление group в ' / group / name_of_group ', где я могу создать экземпляр post .
Таким образом, в основном, когда мы создаем post , поле group должно быть автоматически установлено как group страницы (скажем, группа X, поэтому мы находимся в ' / group / X ') и мы отправляем данные по адресу: POST в / api / post / create
Как это сделать?
Вот мой код:
Мои модели:
class Post(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)#the owner when we delete him, all his posts are deleted
group = models.ForeignKey(Group, default=1, on_delete=models.CASCADE)
class Group(models.Model):
name = models.CharField(max_length=50, default='', unique=True)
Моя форма:
class PostModelForm(forms.ModelForm):
class Meta:
model = Post
fields = [
"content",
"group"
]
Мой API Просмотр для создания сообщения:
class PostCreateAPIView(generics.CreateAPIView): #/api/group/create
serializer_class = PostModelSerializer
permission_classes = [permissions.IsAuthenticated]
вызов ajax при отправке формы
event.preventDefault();
$.ajax({
method : "POST",
url : '/api/post/create',
data : formData,//data contains our new post
success : function(data){
this_.find("input[type=text], textarea").val("");//a display function for html
attachPost(data, prepend = true);//a display function for html
},
error : function(data){
console.log("ERROR:CH0x2 while fetching after creation form submit");
console.log("data :",data.status, data.statusText);
}
});
NB Например, для установки владельца сообщения мы переопределяем метод execute_create (в PostCreateAPIView) , чтобы установить пользователя как request.user нравится
def perform_create(self, serializer): # create the post
serializer.save(user = self.request.user)
но я не могу получить имя группы или pk в этом методе
/////// EDIT /////////
Я мог бы изменить свой URL для создания из:
/ апи / запись / создание
в
/ апи / запись / name_group / создать
Спасибо