-
-
Save elcolie/a013be9c3b7ab5f0cc130e320b19da4b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
`models.py` | |
from django.contrib.gis.db import models | |
from geoposition.fields import GeopositionField | |
from model_controller.models import AbstractModelController | |
from soken_web.apps.customers.models import Customer | |
from django.contrib.auth.models import User | |
from django.db import models | |
from django.utils.translation import ugettext_lazy as _ | |
class AbstractTimeStampMarker(models.Model): | |
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created at")) | |
updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated at")) | |
class Meta: | |
abstract = True | |
class AbstractModelController(AbstractTimeStampMarker): | |
created_user = models.ForeignKey(User, related_name="%(class)s_created_user", verbose_name=_("Created User")) | |
updated_user = models.ForeignKey(User, related_name="%(class)s_updated_user", verbose_name=_("Updated User")) | |
class Meta: | |
abstract = True | |
class House(AbstractModelController): | |
""" | |
"address_line_1": "山形県 寒河江市 夕カヘ", | |
"address_line_2": "", | |
"prefecture": "", | |
"town": "", | |
"city": "", | |
"building": "", | |
"postal_code": "9910006", | |
"location_position": null, | |
""" | |
address_line_1 = models.TextField() | |
address_line_2 = models.TextField() | |
prefecture = models.CharField(max_length=255) | |
town = models.CharField(max_length=255) | |
city = models.CharField(max_length=255) | |
building = models.CharField(max_length=255) | |
postal_code = models.CharField(max_length=10) | |
location = GeopositionField() | |
customers = models.ManyToManyField(Customer, related_name='houses') # Use M2M in case family member do same thing | |
def __str__(self): | |
return f'{self.address_line_1}' | |
`houseimage.py` | |
from django.db import models | |
from model_controller.models import AbstractModelController | |
from soken_web.apps.houses.models import House | |
class HouseImage(AbstractModelController): | |
image = models.ImageField(upload_to='house_images') | |
houses = models.ForeignKey(House, related_name='photos') | |
def __str__(self): | |
return f'{self.image.name}' | |
`serializers.py` | |
from soken_web.apps.commons.serializers import ModelControllerSerializer | |
from soken_web.apps.house_images.models import HouseImage | |
class HouseImageSerializer(ModelControllerSerializer): | |
class Meta: | |
model = HouseImage | |
fields = [ | |
'image', | |
'houses', | |
] | |
from rest_framework import serializers | |
class ModelControllerSerializer(serializers.ModelSerializer): | |
class Meta: | |
abstract = True | |
def create(self, validated_data): | |
user = self.context['request'].user | |
validated_data['created_user'] = user | |
validated_data['updated_user'] = user | |
return super(ModelControllerSerializer, self).create(validated_data) | |
def update(self, instance, validated_data): | |
user = self.context['request'].user | |
validated_data['updated_user'] = user | |
return super().update(instance, validated_data) | |
`viewsets.py` | |
from rest_framework.viewsets import ModelViewSet | |
from soken_web.apps.house_images.api.serializers import HouseImageSerializer | |
from soken_web.apps.house_images.models import HouseImage | |
class HouseImageViewset(ModelViewSet): | |
queryset = HouseImage.objects.all() | |
serializer_class = HouseImageSerializer | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment