Django/DRF가있는 프로젝트에서; 나는 다음과 같은 모델 구조를 가지고 :DRF시 리즈 라이 저가 읽고 쓸 수있는 비 모델 필드
class City(models.Model):
name = models.CharField(max_length=100)
class Company(models.Model):
city = models.ForeignKey(City)
.
.
그리고 회사 모델 시리얼 구조 다음
class CompanySerializer(serializers.ModelSerializer):
city_name = serializers.CharField(write_only=True)
.
.
class Meta:
model = Company
fields = ('city_name',)
def create(self, validated_data):
# Get city
city_name = validated_data.pop('city_name')
try:
city = City.objects.get(name__iexact=city_name)
except City.DoesNotExist:
city = City.objects.create(name=city_name.title())
company = Company.objects.create(city=city, **validated_data)
return company
시리얼 라이저를 통해 회사를 만들어, 사용자가 CITY_NAME을 제공하지만, 난 그 이름으로 새 도시를 만들 존재하지 않으면 기존 항목을 사용하거나 존재하는 항목을 사용하십시오. 이 구조에서는 회사를 반환하는 동안 city_name 필드를 반환 할 수 있기를 원합니다. 모델의 필드가 아니기 때문에, SerializerMethodField를 정상적으로 사용할 수 있습니다 만,이 필드도 기입 해 가능하게하고 싶습니다. 여기에 어떤 옵션이 있습니까? 다음과 같이 만들거나 업데이트 방법에 도시 이름을 얻을 수있는이 방법을 변경 한 후
city_name = serializers.CharField(source='city.name')
:
thod, 제발 –
@ BearBrown는 방법을 만들었습니다. –