Django rest framework 保存(创建、更新)以及与用户模型相关的其他模型的foreignkey值
如果你没有得到正确的答案,这可能是一个具有挑战性的问题。这里我有三个模型,其中部门模型应该通过从与人员模型相关的地点模型中取其地名来创建。Staff模型与用户处于OneToOneField关系中,因此当用户创建部门时,应该像HTML中的HiddenField一样传递地名。此地名与具有GenericForeignKey的用户的地点模型相关。我创建了一个序列化程序,它没有按预期工作,它正在返回地名, 很快,我想创建一个部门,而地点应该从当前用户ID中选择 序列化程序Django rest framework 保存(创建、更新)以及与用户模型相关的其他模型的foreignkey值,django-rest-framework,foreign-keys,django-serializer,generic-foreign-key,Django Rest Framework,Foreign Keys,Django Serializer,Generic Foreign Key,如果你没有得到正确的答案,这可能是一个具有挑战性的问题。这里我有三个模型,其中部门模型应该通过从与人员模型相关的地点模型中取其地名来创建。Staff模型与用户处于OneToOneField关系中,因此当用户创建部门时,应该像HTML中的HiddenField一样传递地名。此地名与具有GenericForeignKey的用户的地点模型相关。我创建了一个序列化程序,它没有按预期工作,它正在返回地名, 很快,我想创建一个部门,而地点应该从当前用户ID中选择 序列化程序 class Departmen
class DepartmentCreateSerializer(serializers.ModelSerializer):
place_code=serializers.CharField(read_only=True)
class Meta:
model=Department
fields = ('department_type','service_no','instructions')
def get_place(self, request):
user_id=self.context['request'].user.id
school_id=Staff.objects.get(auth_user_id= user_id).school_id
places_code_name=Places.objects.get(id= school_id).name
class DepartmentCreateSerializer(serializers.ModelSerializer):
place_code=serializers.CharField(read_only=True)
class Meta:
model=Department
fields = ('department_type','service_no','instructions')
def get_place(self, request):
user_id=self.context['request'].user.id
school_id=Staff.objects.get(auth_user_id= user_id).school_id
places_code_name=Places.objects.get(id= school_id).name
class PlacesSerializer(serializers.ModelSerializer):
class Meta:
model = Places
fields = ('id', 'code', 'name')
from places.serializers import PlacesSerializer
class DepartmentCreateSerializer(serializers.ModelSerializer):
place= PlacesSerializer(read_only=True)
class Meta:
model=Department
fields = ('place','service_no','instructions')
def validate(self, attrs):
palce_obj = self.context['request'].user.staff.place()
attrs.update({'place': place_obj})
attrs = super().validate(attrs)
if not attrs.get('place', None):
raise serializers.ValidationError({'place': ["Place required"]})
return attrs