创建许多对象。Django REST框架
我希望创建相同的对象,它们只会与ForeignKeyField不同创建许多对象。Django REST框架,django,python-2.7,rest,django-rest-framework,Django,Python 2.7,Rest,Django Rest Framework,我希望创建相同的对象,它们只会与ForeignKeyField不同 class MyModel(models.Model): text = models.CharField(max_length=255) author = models.ForeignKey(User, related_name='author') recipient = models.ForeignKey(User, related_name='recipient') 我创建了序列化程序: class
class MyModel(models.Model):
text = models.CharField(max_length=255)
author = models.ForeignKey(User, related_name='author')
recipient = models.ForeignKey(User, related_name='recipient')
我创建了序列化程序:
class UserSerializer(serialiser.ModelSerializer):
class Meta():
model = User
fields = ('id',)
class MyModelSerializer(serializers.ModelSerializer):
recipients = UserSerializer(many=True)
class Meta():
fields = (text,)
我得到的json是这样的:{“text”:“text”,“recipients”:[{“id”:3},{“id”:1},{“id”:2}]}
我希望为每个用户(通过“id”)创建新的对象MyModel。如何执行此操作?您需要重写
MyModelSerializer的方法的.create()
方法
最后应该是这样的:
def create(self, validated_data):
if 'recipients' in validated_data:
recipients_data = validated_data.pop('recipients')
else:
recipients_data = []
for recipient_data in recipients_data:
created_my_model = MyModel.objects.create(recipient=User.objects.get(id=recipient_data['id']),
text=validated_data['text'])
return something # here you need to decide what to return
不过,我不会在循环中请求用户的对象。但是你看到了这个想法。这很好,但是我不能返回MyModel对象的列表,而且收件人的顺序是空的。至于返回什么,这取决于你需要什么。默认情况下,我将返回一个与您收到的对象类似的对象(但可能包含序列化用户,而不是ID列表)。如果您在返回中不需要任何创建的数据,您可以返回一个空的dict。响应代码应该是201,这将表明创建成功。