Python 将模型实例关联到Django中的ManyToManyField
我是Django的新手。我制作了两个这样的模型: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
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的新实例。下面是一个这样做的示例,但它会创建新实例: