나는 장고 사용자 모델을 확장하는 Bcustomer app에 고객 모델을 가지고 있으므로 사용자 테이블에 이름과 같은 기본 세부 사항을 저장하고 나머지 데이터는 도시 등) 고객 테이블에.Django rest framework : 고객의 모델을 1 대 1 필드로 확장하십시오.
API를 통해 아래 코드를 호출하면 다음 오류가 표시됩니다. 그러나 데이터가 테이블에 저장됩니다. 또한이 api에 대한 get 및 put 호출을 구현하려고합니다.
Got AttributeError when attempting to get a value for field `city` on serializer `CustomerSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `User` instance.
Original exception text was: 'User' object has no attribute 'city'.
내 Bcustomer/models.py
class BCustomer(models.Model):
customer = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, primary_key=True, blank=True)
address = models.CharField(max_length=50)
city = models.CharField(max_length=256)
state = models.CharField(max_length=50)
user = models.ForeignKey(settings.AUTH_USER_MODEL, db_index=True, on_delete=models.CASCADE, related_name='customer_creator')
# more fields to go
def __str__(self):
# return str(self.name) (This should print first and last name in User model)
class Meta:
app_label = 'bcustomer'
내 Bcustomer/serializers.py
from django.contrib.auth import get_user_model
from models import BCustomer
class CustomerSerializer(serializers.HyperlinkedModelSerializer):
city = serializers.CharField()
class Meta:
model = get_user_model()
fields = ('first_name', 'email','city')
def create(self, validated_data):
userModel = get_user_model()
email = validated_data.pop('email', None)
first_name = validated_data.pop('first_name', None)
city = validated_data.pop('city', None)
request = self.context.get('request')
creator = request.user
user = userModel.objects.create(
first_name=first_name,
email=email,
# etc ...
)
customer = BCustomer.objects.create(
customer=user,
city=city,
user=creator
# etc ...
)
return user
my Bcustomer/views.py
class CustomerViewSet(viewsets.ModelViewSet):
customer_photo_thumb = BCustomer.get_thumbnail_url
permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
queryset = BCustomer.objects.all()
serializer_class = CustomerSerializer
내 Bcustomer/urls.py
router.register(r'customer', views.CustomerViewSet, 'customers')
POST 요청 형식
{
"first_name":"Jsanefvf dss",
"city":"My City",
"email":"[email protected]",
#more fields
}
또한이 API는 put 및 get을 구현해야합니다. 이제 데이터가 두 테이블 모두에 저장되지만 오류가 표시됩니다.
'CustomerSerializer'가'BCustomer'를 직렬화하기로되어 있다면, 왜 모델이'get_user_model'으로 설정되어 있습니까? –