-
Notifications
You must be signed in to change notification settings - Fork 30
aysenuryazicii-homework3 #71
base: main
Are you sure you want to change the base?
Changes from all commits
4a97d6e
696e7e7
30d6bd6
b691e51
0f7ee72
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| from django_filters import rest_framework as filters | ||
|
|
||
| from baskets.models import Basket, BasketItem | ||
| from customers.filters import CustomerFilter | ||
| from products.filters import ProductFilter | ||
|
|
||
|
|
||
| class BasketFilter(filters.FilterSet): | ||
| customer = CustomerFilter | ||
|
|
||
| class Meta: | ||
| model = Basket | ||
| fields = ("customer",) | ||
|
|
||
|
|
||
| class BasketItemFilter(filters.FilterSet): | ||
| product = ProductFilter | ||
| basket = BasketFilter | ||
|
|
||
| class Meta: | ||
| model = BasketItem | ||
| fields = ("basket", "product") | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| from rest_framework import serializers | ||
| from baskets.models import Basket, BasketItem | ||
| from customers.serializers import CustomerSerializer | ||
| from products.serializers import ProductSerializer, ProductDetailedSerializer | ||
|
|
||
|
|
||
| class BasketSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = Basket | ||
| fields = ("id", "customer", "status") | ||
|
|
||
|
|
||
| class BasketItemSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = BasketItem | ||
| fields = ("id", "basket", "product", "quantity", "price") | ||
|
|
||
|
|
||
| class BasketDetailedSerializer(BasketSerializer): | ||
| customer = CustomerSerializer() | ||
|
|
||
|
|
||
| class BasketItemDetailedSerializer(BasketItemSerializer): | ||
| basket = BasketSerializer() | ||
| product = ProductSerializer() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,27 @@ | ||
| from django.shortcuts import render | ||
| from rest_framework import viewsets | ||
|
|
||
| # Create your views here. | ||
| from baskets.filters import BasketFilter, BasketItemFilter | ||
| from baskets.models import Basket, BasketItem | ||
| from baskets.serializers import BasketSerializer, BasketDetailedSerializer, BasketItemSerializer, \ | ||
| BasketItemDetailedSerializer | ||
| from core.mixins import DetailedViewSetMixin | ||
|
|
||
|
|
||
| class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| queryset = Basket.objects.all() | ||
| serializer_class = BasketSerializer | ||
| filterset_class = BasketFilter | ||
| serializer_action_classes = { | ||
| "detailed_list": BasketDetailedSerializer, | ||
| "detailed": BasketDetailedSerializer, | ||
| } | ||
|
|
||
|
|
||
| class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| queryset = BasketItem.objects.all() | ||
| serializer_class = BasketItemSerializer | ||
| filterset_class = BasketItemFilter | ||
| serializer_action_classes = { | ||
| "detailed_list": BasketItemDetailedSerializer, | ||
| "detailed": BasketItemDetailedSerializer, | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| from django.utils.translation import gettext_lazy as _ | ||
| from django_filters import rest_framework as filters | ||
|
|
||
| from customers.models import City, Country, Customer, Address | ||
|
|
||
|
|
||
| class CustomerFilter(filters.FilterSet): | ||
| first_name = filters.CharFilter(label=_("First Name"), lookup_expr="icontains") | ||
| last_name = filters.CharFilter(label=_("Last Name"), lookup_expr="icontains") | ||
| email = filters.CharFilter(label=_("Email"), lookup_expr="icontains") | ||
|
|
||
| class Meta: | ||
| model = Customer | ||
| fields = ("first_name", "last_name", "email") | ||
|
|
||
|
|
||
| class CountryFilter(filters.FilterSet): | ||
| name = filters.CharFilter(label=_("Country Name"), lookup_expr="icontains") | ||
|
|
||
| class Meta: | ||
| model = Country | ||
| fields = ("name",) | ||
|
|
||
|
|
||
| class CityFilter(filters.FilterSet): | ||
| country = CountryFilter | ||
| name = filters.CharFilter(label=_("City Name"), lookup_expr="icontains") | ||
|
|
||
| class Meta: | ||
| model = City | ||
| fields = ("name", "country") | ||
|
|
||
|
|
||
| class AddressFilter(filters.FilterSet): | ||
| customer = CustomerFilter | ||
| name = filters.CharFilter(label=_("Address Name"), lookup_expr="icontains") | ||
| city = CityFilter | ||
|
|
||
| class Meta: | ||
| model = Address | ||
| fields = ("customer", "name", "city") |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| from rest_framework import serializers | ||
| from django.db.transaction import atomic | ||
|
|
||
| from customers.models import Customer, Address, City, Country | ||
|
|
||
|
|
||
| class CitySerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = City | ||
| fields = ("id", "name", "country") | ||
|
|
||
|
|
||
| class CountrySerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = Country | ||
| fields = ("id", "name") | ||
|
|
||
|
|
||
| class CustomerSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = Customer | ||
| fields = ("id", "first_name", "last_name", "email") | ||
|
|
||
|
|
||
| class AddressSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = Address | ||
| fields = ("id", "customer", "name", "full_name", "line_1", "line_2", | ||
| "phone", "district", "zipcode", "city") | ||
|
|
||
|
|
||
| class AddressDetailedSerializer(AddressSerializer): | ||
| customer = CustomerSerializer() | ||
| city = CitySerializer() | ||
|
|
||
|
|
||
| class CityDetailedSerializer(CitySerializer): | ||
| country = CountrySerializer() | ||
|
|
||
| class Meta: | ||
| model = City | ||
| fields = ("id", "name", "country") | ||
|
|
||
| @atomic() | ||
| def create(self, validated_data): | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ProductDetailedSerializer icerisinde ornek olmasi acisindan vermistik, genelde detailed serializerlari sadece veri gostermek icin aliyoruz ve kayit yapmak ve guncellemek icin kullanmiyoruz, ozel durumlar yoksa kayit create/update islemleri icin genel olarak nested olmayan serializer'i kullaniyoruz. |
||
| country = validated_data.pop("country", None) | ||
| city = super().create(validated_data) | ||
| if country: | ||
| serializer = CountrySerializer(data=country, many=True) | ||
| serializer.is_valid(raise_exception=True) | ||
| serializer.save() | ||
| city.categories.add(*serializer.instance) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. city objesinin categories adında bir fieldı yok. city nin country fieldı zorunlu olduğundan oluşturabilmek için önce country oluşturman gerekli. |
||
| return city | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,39 @@ | ||
| from django.shortcuts import render | ||
| from rest_framework import viewsets | ||
|
|
||
| # Create your views here. | ||
| from core.mixins import DetailedViewSetMixin | ||
| from customers.filters import CityFilter, CountryFilter, CustomerFilter, AddressFilter | ||
| from customers.models import City, Country, Customer, Address | ||
| from customers.serializers import CustomerSerializer, CitySerializer, CountrySerializer, AddressSerializer, \ | ||
| CityDetailedSerializer, AddressDetailedSerializer | ||
|
|
||
|
|
||
| class CityViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| queryset = City.objects.all() | ||
| serializer_class = CitySerializer | ||
| filterset_class = CityFilter | ||
| serializer_action_classes = { | ||
| "detailed_list": CityDetailedSerializer, | ||
| "detailed": CityDetailedSerializer, | ||
| } | ||
|
|
||
|
|
||
| class CountryViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| queryset = Country.objects.all() | ||
| serializer_class = CountrySerializer | ||
| filterset_class = CountryFilter | ||
|
|
||
|
|
||
| class CustomerViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| queryset = Customer.objects.all() | ||
| serializer_class = CustomerSerializer | ||
| filterset_class = CustomerFilter | ||
|
|
||
|
|
||
| class AddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| queryset = Address.objects.all() | ||
| serializer_class = AddressSerializer | ||
| filterset_class = AddressFilter | ||
| serializer_action_classes = { | ||
| "detailed_list": AddressDetailedSerializer, | ||
| "detailed": AddressDetailedSerializer, | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -32,7 +32,6 @@ | |
|
|
||
| ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[]) | ||
|
|
||
|
|
||
| # Application definition | ||
|
|
||
| INSTALLED_APPS = [ | ||
|
|
@@ -54,7 +53,9 @@ | |
| ] | ||
|
|
||
| REST_FRAMEWORK = { | ||
| 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'] | ||
| 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], | ||
| 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', | ||
| 'PAGE_SIZE': 100 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Page Number Pagination daha iyi olabilir. |
||
| } | ||
|
|
||
| MIDDLEWARE = [ | ||
|
|
@@ -88,13 +89,11 @@ | |
|
|
||
| WSGI_APPLICATION = 'ecommerce.wsgi.application' | ||
|
|
||
|
|
||
| # Database | ||
| # https://docs.djangoproject.com/en/3.2/ref/settings/#databases | ||
|
|
||
| DATABASES = {'default': env.db('DATABASE_URL')} | ||
|
|
||
|
|
||
| # Password validation | ||
| # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators | ||
|
|
||
|
|
@@ -113,7 +112,6 @@ | |
| }, | ||
| ] | ||
|
|
||
|
|
||
| # Internationalization | ||
| # https://docs.djangoproject.com/en/3.2/topics/i18n/ | ||
|
|
||
|
|
@@ -138,7 +136,6 @@ def gettext_noop(s): | |
|
|
||
| USE_TZ = True | ||
|
|
||
|
|
||
| # Static files (CSS, JavaScript, Images) | ||
| # https://docs.djangoproject.com/en/3.2/howto/static-files/ | ||
|
|
||
|
|
@@ -151,4 +148,4 @@ def gettext_noop(s): | |
| DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' | ||
| AUTH_USER_MODEL = "customers.Customer" | ||
|
|
||
| LOCALE_PATHS = (str(BASE_DIR / "locale/"), ) | ||
| LOCALE_PATHS = (str(BASE_DIR / "locale/"),) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| from django_filters import rest_framework as filters | ||
| from django.utils.translation import gettext_lazy as _ | ||
|
|
||
| from customers.filters import CityFilter, CustomerFilter | ||
| from orders.models import BillingAddress, ShippingAddress, OrderBankAccount, Order, OrderItem | ||
| from products.filters import ProductFilter | ||
| from baskets.filters import BasketFilter | ||
|
|
||
|
|
||
| class BillingAddressFilter(filters.FilterSet): | ||
| full_name = filters.CharFilter(label=_("Full Name"), lookup_expr="icontains") | ||
| city = CityFilter | ||
|
|
||
| class Meta: | ||
| model = BillingAddress | ||
| fields = ("full_name", "city") | ||
|
|
||
|
|
||
| class ShippingAddressFilter(filters.FilterSet): | ||
| full_name = filters.CharFilter(label=_("Full Name"), lookup_expr="icontains") | ||
| city = CityFilter | ||
|
|
||
| class Meta: | ||
| model = ShippingAddress | ||
| fields = ("full_name", "city") | ||
|
|
||
|
|
||
| class OrderFilter(filters.FilterSet): | ||
| customer = CustomerFilter | ||
| basket = BasketFilter | ||
|
|
||
| class Meta: | ||
| model = Order | ||
| fields = ("customer", "basket") | ||
|
|
||
|
|
||
| class OrderBankAccountFilter(filters.FilterSet): | ||
| name = filters.CharFilter(label=_("Name"), lookup_expr="icontains") | ||
| iban = iban = filters.CharFilter(label=_("IBAN"), lookup_expr="icontains") | ||
| bank_name = filters.CharFilter(label=_("Bank Name"), lookup_expr="icontains") | ||
| order = OrderFilter | ||
|
|
||
| class Meta: | ||
| model = OrderBankAccount | ||
| fields = ("name", "iban", "bank_name", "order") | ||
|
|
||
|
|
||
| class OrderItemFilter(filters.FilterSet): | ||
| product = ProductFilter | ||
| order = OrderFilter | ||
|
|
||
| class Meta: | ||
| model = OrderItem | ||
| fields = ("order", "product") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
boyle bir kullanimi nereden ogrendik?