Skip to content

Commit

Permalink
add messenger model, split postcard serializer for read and write
Browse files Browse the repository at this point in the history
  • Loading branch information
sunForest committed Nov 1, 2015
1 parent db2e787 commit f9cb1eb
Show file tree
Hide file tree
Showing 8 changed files with 150 additions and 18 deletions.
23 changes: 23 additions & 0 deletions avipost/contrib/management/commands/_messengers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from autofixture import AutoFixture
from postcards.models import Messenger


def create():

messengers = [('European Goldfinch', 'messengers/european_goldfinch.png'),
('European Robin', 'messengers/european_robin.png')]

clean()

for name, portrait in messengers:
AutoFixture(
Messenger,
field_values={
'portrait': portrait,
'name': name
}
).create()


def clean():
Messenger.objects.all().delete()
28 changes: 28 additions & 0 deletions avipost/postcards/migrations/0005_auto_20151101_0900.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('postcards', '0004_auto_20151027_1942'),
]

operations = [
migrations.CreateModel(
name='Messenger',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('name', models.CharField(max_length=50, verbose_name='Name')),
('portrait', models.ImageField(verbose_name='Portrait', upload_to='')),
('description', models.TextField(verbose_name='Description')),
],
),
migrations.AlterField(
model_name='postcard',
name='cover',
field=models.ImageField(verbose_name='Cover', upload_to=''),
),
]
20 changes: 20 additions & 0 deletions avipost/postcards/migrations/0006_postcard_messenger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('postcards', '0005_auto_20151101_0900'),
]

operations = [
migrations.AddField(
model_name='postcard',
name='messenger',
field=models.ForeignKey(related_name='delivered_by', default=1, to='postcards.Messenger'),
preserve_default=False,
),
]
19 changes: 19 additions & 0 deletions avipost/postcards/migrations/0007_auto_20151101_0937.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('postcards', '0006_postcard_messenger'),
]

operations = [
migrations.AlterField(
model_name='postcard',
name='messenger',
field=models.ForeignKey(to='postcards.Messenger', related_name='delivered_by', default=1),
),
]
19 changes: 19 additions & 0 deletions avipost/postcards/migrations/0008_auto_20151101_0953.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('postcards', '0007_auto_20151101_0937'),
]

operations = [
migrations.AlterField(
model_name='postcard',
name='messenger',
field=models.ForeignKey(related_name='delivered_by', to='postcards.Messenger'),
),
]
15 changes: 10 additions & 5 deletions avipost/postcards/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@
from django.contrib.auth.models import User


class Messenger(models.Model):
name = models.CharField('Name', max_length=50)
portrait = models.ImageField('Portrait')
description = models.TextField('Description')


class Postcard(models.Model):
# didn't use TextField here because Django doesn't check max length for
# textField?
message = models.CharField('Message', max_length=140, default="Hello!")
cover = models.ImageField('Cover', default="placeholder.jpg")
sender = models.ForeignKey(User, related_name="sent_by", default=1)
receiver = models.ForeignKey(User, related_name="received_by", default=1)
cover = models.ImageField('Cover')
longitude = models.FloatField()
latitude = models.FloatField()
sender = models.ForeignKey(User, related_name="sent_by", default=1)
receiver = models.ForeignKey(User, related_name="received_by", default=1)
messenger = models.ForeignKey(Messenger, related_name="delivered_by")
31 changes: 24 additions & 7 deletions avipost/postcards/serializers.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,34 @@
from rest_framework import serializers
from .models import Postcard
from .models import Postcard, Messenger
from django.contrib.auth.models import User


class PostcardSerializer(serializers.HyperlinkedModelSerializer):
class MessengerSerializer(serializers.ModelSerializer):

class Meta:
model = Messenger
fields = ('name', 'portrait')


class PostcardReadSerializer(serializers.ModelSerializer):

sender = serializers.SlugRelatedField(read_only=True,
slug_field='username')
receiver = serializers.SlugRelatedField(write_only=True,
slug_field='id',
queryset=User.objects.all())
messenger = MessengerSerializer()

class Meta:
model = Postcard
fields = ('message', 'cover', 'sender', 'latitude',
'longitude', 'messenger')


class PostcardWriteSerializer(serializers.HyperlinkedModelSerializer):

receiver = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
messenger = serializers.PrimaryKeyRelatedField(
queryset=Messenger.objects.all())

class Meta:
model = Postcard
fields = ('message', 'cover', 'sender', 'receiver', 'latitude',
'longitude')
fields = ('message', 'cover', 'receiver', 'latitude',
'longitude', 'messenger')
13 changes: 7 additions & 6 deletions avipost/postcards/views.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
from random import random
from rest_framework import viewsets
from rest_framework import permissions
from rest_framework.parsers import FileUploadParser, JSONParser
from .models import Postcard
from .serializers import PostcardSerializer
from .serializers import PostcardReadSerializer, PostcardWriteSerializer


class PostcardViewSet(viewsets.ModelViewSet):

def get_serializer_class(self):
if self.request.method == 'GET':
return PostcardReadSerializer
return PostcardWriteSerializer

def get_queryset(self):
user = self.request.user
return Postcard.objects.filter(receiver=user)

def perform_create(self, serializer):
lat = random() * 160 - 80
lon = random() * 360 - 180
serializer.save(sender=self.request.user, longitude=lon, latitude=lat)
serializer.save(sender=self.request.user)

serializer_class = PostcardSerializer
parser_classes = (FileUploadParser, JSONParser,)
permission_classes = (permissions.IsAuthenticated,)

0 comments on commit f9cb1eb

Please sign in to comment.