Skip to content

Instantly share code, notes, and snippets.

@elcolie
Last active September 20, 2017 05:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elcolie/a013be9c3b7ab5f0cc130e320b19da4b to your computer and use it in GitHub Desktop.
Save elcolie/a013be9c3b7ab5f0cc130e320b19da4b to your computer and use it in GitHub Desktop.
`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