我有一个看起来像这样的模型:
class Profile(models.Model):
following = models.ManyToManyField('Profile', related_name='followed')
admin_notes = models.TextField()
还有一个看起来像这样的Django Rest Framework序列化程序:
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Profile
fields = '__all__'
创建新的 Profile
时,我想中断save / create以编程方式设置 admin_notes
. 我知道在基于函数的视图中如何做到这一点,但这次我使用DRF的视图集,所以我想在序列化程序中执行此操作 . 然而,自我指涉关系给了我麻烦 .
我在_1547384内尝试了这个:
def create(self, **validated_data):
p = Profile(**validated_data)
p.admin_notes = 'Test'
p.save()
这个,以及尝试 Profile.objects.create
而不是仅在第一行中创建一个新的 Profile
实例,导致以下错误:
Exception Value: "<Profile>" needs to have a value for field "id" before this many-to-many relationship can be used.
试试这个:
def create(self, validated_data):
validated_data['admin_notes'] = 'Test'
return super(ProfileSerializer, self).create(**validated_data)
结果出现此错误:
Exception Value: create() got an unexpected keyword argument 'following'
据我所知,Django在两步保存过程中创建了m2m关系,所以错误很有意义,但仍然让我感到困惑的是如何向前发展 . 在给定模型设置方式的情况下,如何在序列化器中设置 admin_notes
的值?
1 回答
试试这个(假设你将Profile实例的id传递给你的m2m字段):