Python 将模型实例关联到Django中的ManyToManyField

Python 将模型实例关联到Django中的ManyToManyField,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我是Django的新手。我制作了两个这样的模型: class A(models.Model): title = models.CharField(max_length=255, null=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now_add=False, null=True) b_assigned = models.M

我是Django的新手。我制作了两个这样的模型:

class A(models.Model):
    title = models.CharField(max_length=255, null=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now_add=False, null=True)
    b_assigned = models.ManyToManyField(B, related_name='b_assigned')

    class Meta:
       db_table = 'a_table'


class B(models.Model):
    name = models.CharField(max_length=255, null=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now_add=False, null=True)

    class Meta:
       db_table = 'b_table'
相应类的序列化程序包括:

class ASerializer(serializers.ModelSerializer):
    b_assigned = BSerializer(many=True, required=True)
    class Meta:
       model = A
       fields = ('id', 'title', 'b_assigned')
       read_only_fields = ('id',)

class BSerializer(serializers.ModelSerializer):
    class Meta:
       model = B
       fields = ('id', 'name')
       read_only_fields = ('id',)
我已经在数据库中找到了一些
B
对象。 现在,为了创建
A
的对象,我必须提供
B
的对象数组。 如何使用Django REST框架实现这一点

我知道,我必须覆盖
ASerializer
中的
create
update
。但是如何将
B
的数组使用其ID添加到
A
。我不想在创建
A
时创建
B
的任何新实例。要实现这一点,请仅使用REST框架


澄清:我正在发布
B
的ID,用于创建/更新
A

您不需要创建
B
的新对象。据我所知,您在覆盖的
create
update
中获取多个
B
时遇到问题。有两种方法可以实现这一点,一种是创建
query\u集
,然后在对象上迭代。示例:
B.objects.filter(id\u in=[1,3,4])
。 或者,您可以在方法中迭代ID,然后获取这些
B
s,然后将它们添加到
A
B\u关联中

我希望你在你的
帖子
请求中有一个b_助理

ids = b_associate.split(',')
for id in ids:
    b_obj = B.objects.get(id=id)
    A.b_associate.add(b_obj)

您不需要创建
B
的新对象。据我所知,您在覆盖的
create
update
中获取多个
B
时遇到问题。有两种方法可以实现这一点,一种是创建
query\u集
,然后在对象上迭代。示例:
B.objects.filter(id\u in=[1,3,4])
。 或者,您可以在方法中迭代ID,然后获取这些
B
s,然后将它们添加到
A
B\u关联中

我希望你在你的
帖子
请求中有一个b_助理

ids = b_associate.split(',')
for id in ids:
    b_obj = B.objects.get(id=id)
    A.b_associate.add(b_obj)

我也做到了这一点,谢谢你的指导:

def create(self, validated_data):
    a = A.objects.create(**validated_data)
    a.save()
    ids = self.initial_data['b_assigned'].split(',')
    bs = B.objects.filter(id__in=ids)
    for b in bs:
        a.b_assigned.add(b)
    return a

我也做到了这一点,谢谢你的指导:

def create(self, validated_data):
    a = A.objects.create(**validated_data)
    a.save()
    ids = self.initial_data['b_assigned'].split(',')
    bs = B.objects.filter(id__in=ids)
    for b in bs:
        a.b_assigned.add(b)
    return a

如何获取数据库中的b的id,然后将它们添加到create方法中指定的A的b_中?您不需要创建B的新实例。下面是一个这样做的示例,但它会创建新实例:获取数据库中的B的ID,然后将它们添加到create方法中指定的A的B_中如何?您不需要创建B的新实例。下面是一个这样做的示例,但它会创建新实例: