Связь пользовательской модели с моделью пользователя Django Помогите пожалуйста, я новичок в Django rest Api
Я новичок в Django Rest API для модели пользователя я использую Django модель пользователя по умолчанию. моя конечная цель - когда пользователь входит в систему, он сможет видеть данные, относящиеся только к нему
Я хочу, чтобы мое значение было таким
{ "user": 1
{
"id": 1,
"rent_date": "23-08-2022",
"rentmonth": "June",
"rent_amount": 5000.0,
"bijli_bill": 250.0,
"other_amount": 150.0,
"other_commnet": "test",
"total_amount": 5400.0,
"total_rent_amount": 17000.0,
}
}
Но получается вот так, пользователь показывает под моделью аренды
{
"status": "success",
"data": [
{
"id": 1,
"rent_date": "23-08-2022",
"rentmonth": "June",
"rent_amount": 5000.0,
"bijli_bill": 250.0,
"other_amount": 150.0,
"other_commnet": "test",
"total_amount": 5400.0,
"total_rent_amount": 17000.0,
"user": 1
},
{
"id": 2,
"rent_date": "23-08-2022",
"rentmonth": "July",
"rent_amount": 6000.0,
"bijli_bill": 250.0,
"other_amount": 150.0,
"other_commnet": "test",
"total_amount": 6400.0,
"total_rent_amount": 17000.0,
"user": 2
},
Это мой Model.py from django.contrib.auth.models import User
class rent(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
rent_date = models.DateField(auto_now_add=True)
rentmonth = models.CharField(max_length=30)
rent_amount = models.FloatField()
bijli_bill = models.FloatField()
other_amount = models.FloatField(blank=True)
other_commnet = models.CharField(blank=True, max_length=200)
@property
def total_amount(self):
return self.rent_amount + self.bijli_bill + self.other_amount
это мой serializers.py
from rest_framework import serializers
from .models import rent
from django.contrib.auth.models import User
from django.db.models import Sum
class rentSerializer(serializers.ModelSerializer):
rent_date = serializers.DateField(format="%d-%m-%Y", read_only=True)
rentmonth = serializers.CharField()
rent_amount = serializers.FloatField()
bijli_bill = serializers.FloatField()
other_amount = serializers.FloatField()
other_commnet = serializers.CharField(max_length=200)
total_amount = serializers.FloatField()
total_rent_amount = serializers.SerializerMethodField()
class Meta:
model = rent
fields = ('__all__')
def get_total_rent_amount(self, obj):
totalprice = rent.objects.all().aggregate(total_price=Sum('rent_amount'))
return totalprice["total_price"]
# User Serializer
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email')
# Register Serializer
class RegisterSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(validated_data['username'], validated_data['email'], validated_data['password'])
return user
Вот мой view.py class rentViews(APIView): def post(self, request): serializer = rentSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response({"status": "success", "data": serializer.data}, status=status.HTTP_200_OK) else: return Response({"status": "error", "data": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
def get(self, request, id=None):
if id:
item = rent.objects.get(id=id)
serializer = rentSerializer(item)
return Response({"status": "success", "data": serializer.data}, status=status.HTTP_200_OK)
items = rent.objects.all()
serializer = rentSerializer(items, many=True)
return Response({"status": "success", "data": serializer.data}, status=status.HTTP_200_OK)
def patch(self, request, id=None):
item = rent.objects.get(id=id)
serializer = rentSerializer(item, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response({"status": "success", "data": serializer.data})
else:
return Response({"status": "error", "data": serializer.errors})
def delete(self, request, id=None):
item = get_object_or_404(rent, id=id)
item.delete()
return Response({"status": "success", "data": "Item Deleted"})
###############################UserAPI#######################################
# Register API
class RegisterAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
# Login API
class LoginAPI(KnoxLoginView):
permission_classes = (permissions.AllowAny,)
def post(self, request, format=None):
serializer = AuthTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
login(request, user)
return super(LoginAPI, self).post(request, format=None)