Django Rest框架创建对象附加数据

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

使用Django 2.0,我有两个模型postgroup,在post中有一个外键指向group。我在“/group/name\u of_group”上有一个组的详细视图,在那里我可以创建一个post的实例。 因此,基本上,当我们创建post时,它的group字段应该自动设置为页面的group(比如说group X,所以我们位于'/group/X'),并将数据发送到:post to/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"
               ]
创建帖子的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
});