Django Rest框架创建对象附加数据
使用Django 2.0,我有两个模型post和group,在post中有一个外键指向group。我在“/group/name\u of_group”上有一个组的详细视图,在那里我可以创建一个post的实例。 因此,基本上,当我们创建post时,它的group字段应该自动设置为页面的group(比如说group X,所以我们位于'/group/X'),并将数据发送到:post to/api/post/create 怎么做? 这是我的密码: 我的模型:Django Rest框架创建对象附加数据,django,django-rest-framework,Django,Django Rest Framework,使用Django 2.0,我有两个模型post和group,在post中有一个外键指向group。我在“/group/name\u of_group”上有一个组的详细视图,在那里我可以创建一个post的实例。 因此,基本上,当我们创建post时,它的group字段应该自动设置为页面的group(比如说group X,所以我们位于'/group/X'),并将数据发送到:post to/api/post/create 怎么做? 这是我的密码: 我的模型: class Post(models.Mode
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"
]
创建帖子的My 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);
}
});
N.B一个例子是设置帖子的所有者,我们覆盖方法perform\u create(在PostCreateAPIView中)以将用户设置为请求
def perform_create(self, serializer): # create the post
serializer.save(user = self.request.user)
但是我不能用那种方法得到组的名称或pk
///////编辑/////////
我可以从以下位置更改我的创建url:
/api/post/create
到
/api/post/name\u group/create
谢谢你我用JQuery来做这件事,
在documentready上,我选择了这个项并设置了它的值,我设法将它传递到我的序列化程序中,最后我像这样隐藏了这个项:(这个项是一个HTML项)
HTMl:(post)容器是我要附加帖子的地方
<p id="post-container" group-id = "{{object.pk}}">
</p>
谢谢大家!我真的不明白你们想做什么,你们想把你们的新帖子的组设置为“创建”吗(因为你们是在/group/create上请求的)?否则,你们的“数据包含我们的新帖子”中到底有什么内容?如果你不告诉django这样或那样的方式,django应该如何猜测在帖子中添加哪个组?我想创建一个新帖子,并根据请求自动设置组(它包含kwargs中的组)但是我在哪里可以访问此请求以获取组名并将其设置到formData谢谢!在
PostModelForm
字段属性中包含组
,因此表单将具有组选择小部件。如果我理解您应该从字段中省略组,对吗?
class GroupModelSerializer(serializers.ModelSerializer):
class Meta:
model = Group # the model to get fields from
fields = [
'id',//this is the id I get and set on the choice field (<select>)
'moderators',
'name',
'description',
'timestamp'
]
$(document).on("ready",function(){
var selectGroup = $('#create-post').find('select');//create-post is the id of the form html item where I put the django generated form
var postContainer = $('#post-container');
var labelGroup = $('#create-post').find('label');
var groupId = postContainer.attr("group-id");
selectGroup.val(groupId); selectGroup.prop('disabled',true); selectGroup.hide();labelGroup.hide()
initAjaxVariables('post-container', fetchDataUrl, postDataUrl); // init variables
initPostListDisplay(); //Fetch posts and display them
});