如果您做得不好,这可能是一个具有挑战性的问题。在这里,我有三个模型,应通过从与职员模型相关的地方模型中获取其地方名称来创建部门模型。员工模型与用户之间具有OneToOneField关系,因此,当用户创建部门时,地名应像HTML中的HiddenField一样传递。该场所名称与具有GenericForeignKey的用户的场所模型相关。我创建了一个序列化器,它无法按预期工作,它返回了地名,。
不久后我想创建一个部门,而应从当前用户ID中选择地方。
class Staff(BaseModel): ROLES = [ ('ADMIN', 'Admin'), ('TEACHER', 'Teacher') ] auth_user = models.OneToOneField(User, on_delete=models.CASCADE) name = models.CharField(max_length=50) school_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) school_id = models.PositiveIntegerField() school = GenericForeignKey('school_content_type', 'school_id') role = models.CharField(null=True, blank=True, choices=ROLES, max_length=20) class Places(BaseModel): name = models.CharField(max_length=50) code = models.CharField(max_length=12, unique=True) class Department(BaseModel): TYPES = [ ('ONLINE', 'Online'), ('OFFLINE', 'OfFline') ] department_type = models.CharField(max_length=15, choices=TYPES) service_no = models.CharField(max_length=50) instructions = models.TextField(null=True, blank=True) place = models.ForeignKey(Places, to_field='code', db_column='place_code', on_delete=models.PROTECT)
SERIALIZERS
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