finished the addresses app
This commit is contained in:
+2
-1
@@ -16,7 +16,7 @@ class CityAdmin(admin.ModelAdmin):
|
||||
list_display = (
|
||||
"city_name",
|
||||
"city_local_id",
|
||||
"province"
|
||||
"province",
|
||||
)
|
||||
|
||||
admin.site.register(City, CityAdmin)
|
||||
@@ -27,6 +27,7 @@ class AddressAdmin(admin.ModelAdmin):
|
||||
"address_detail",
|
||||
"province",
|
||||
"city",
|
||||
"user__email",
|
||||
]
|
||||
|
||||
admin.site.register(Address, AddressAdmin)
|
||||
@@ -17,10 +17,13 @@ class CitySerializer(serializers.ModelSerializer):
|
||||
class AddressSerializer(serializers.ModelSerializer):
|
||||
province_name = serializers.CharField(source="province.province_name", read_only=True)
|
||||
city_name = serializers.CharField(source="city.city_name", read_only=True)
|
||||
user_email = serializers.EmailField(source="user.email", read_only=True)
|
||||
absolute_url = serializers.SerializerMethodField(method_name="get_absolute_url", read_only=True)
|
||||
relative_url = serializers.URLField(source="get_absolute_relative_url")
|
||||
class Meta:
|
||||
model = Address
|
||||
fields = ["province", "province_name", "city", "city_name", "postal_code", "address_detail", "user", "created_at", "updated_at"]
|
||||
read_only_fields = ["user", "province_name", "city_name", "created_at", "updated_at"]
|
||||
fields = ["province", "province_name", "city", "city_name", "postal_code", "address_detail", "relative_url", "absolute_url", "user_email", "created_at", "updated_at"]
|
||||
read_only_fields = ["user_email", "absolute_url", "province_name", "city_name", "created_at", "updated_at"]
|
||||
|
||||
def to_representation(self, instance):
|
||||
rep = super().to_representation(instance)
|
||||
@@ -30,5 +33,13 @@ class AddressSerializer(serializers.ModelSerializer):
|
||||
rep.pop("city_name")
|
||||
rep.pop("created_at")
|
||||
rep.pop("updated_at")
|
||||
|
||||
else:
|
||||
rep.pop("absolute_url")
|
||||
rep.pop("relative_url")
|
||||
|
||||
return rep
|
||||
return rep
|
||||
|
||||
def get_absolute_url(self, obj):
|
||||
request = self.context.get("request")
|
||||
return request.build_absolute_uri(obj.pk)
|
||||
|
||||
@@ -26,8 +26,8 @@ class AddressViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = serializers.AddressSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
user_id = self.request.user.id
|
||||
return Address.objects.filter(user_id=user_id)
|
||||
user = self.request.user
|
||||
return Address.objects.filter(user=user)
|
||||
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from faker import Faker
|
||||
from django.contrib.auth import get_user_model
|
||||
from random import choice, randint
|
||||
from django.db.models import Q
|
||||
from ...models import Address, Province, City
|
||||
|
||||
user = get_user_model()
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "fake address creator"
|
||||
|
||||
def __init__(self, stdout=None, stderr=None, no_color=False, force_color=False):
|
||||
super().__init__(stdout, stderr, no_color, force_color)
|
||||
self.faker = Faker()
|
||||
|
||||
def handle(self, *args, **options):
|
||||
|
||||
print("creating fake users...")
|
||||
|
||||
user1 = user.objects.create_user(
|
||||
phone_number=self.faker.phone_number(),
|
||||
email=self.faker.email(),
|
||||
username=self.faker.user_name(),
|
||||
password="string123",
|
||||
)
|
||||
|
||||
|
||||
user2 = user.objects.create_user(
|
||||
phone_number=self.faker.phone_number(),
|
||||
email=self.faker.email(),
|
||||
username=self.faker.user_name(),
|
||||
password="string123",
|
||||
)
|
||||
|
||||
print("operation successful...")
|
||||
|
||||
# print(City.objects.values_list("city_local_id", flat=True)[:10])
|
||||
|
||||
print("creating fake addresses")
|
||||
for _ in range(10):
|
||||
province = Province.objects.get(pk=randint(0, 30))
|
||||
city_list = list(City.objects.filter(province=province).values_list(
|
||||
"city_local_id",
|
||||
flat=True,))
|
||||
city = City.objects.get(Q(province=province) & Q(city_local_id=choice(city_list)))
|
||||
address = Address.objects.create(
|
||||
user=user1,
|
||||
province=province,
|
||||
city=city,
|
||||
postal_code=self.faker.postalcode(),
|
||||
address_detail=self.faker.address(),
|
||||
)
|
||||
|
||||
for _ in range(5):
|
||||
province = Province.objects.get(pk=randint(0, 30))
|
||||
city_list = City.objects.filter(province=province).values_list(
|
||||
"city_local_id",
|
||||
flat=True,
|
||||
)
|
||||
city = City.objects.get(Q(province=province) & Q(city_local_id=choice(city_list)))
|
||||
address = Address.objects.create(
|
||||
user=user2,
|
||||
province=province,
|
||||
city=city,
|
||||
postal_code=self.faker.postalcode(),
|
||||
address_detail=self.faker.address(),
|
||||
)
|
||||
|
||||
print("operation successful...")
|
||||
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS("fake addresses and accounts created successfully...")
|
||||
)
|
||||
|
||||
|
||||
+4
-1
@@ -1,5 +1,6 @@
|
||||
from django.db import models
|
||||
from config.settings import AUTH_USER_MODEL
|
||||
from django.urls import reverse
|
||||
|
||||
class Province(models.Model):
|
||||
province_id = models.IntegerField(primary_key=True)
|
||||
@@ -37,4 +38,6 @@ class Address(models.Model):
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.address_detail[:10]}..."
|
||||
|
||||
|
||||
def get_absolute_relative_url(self):
|
||||
return reverse("addresses:address-api-urls:address-viewset-detail", kwargs={"pk": self.pk})
|
||||
Reference in New Issue
Block a user