parent
8c97b56ac2
commit
e6b514e71c
18 changed files with 155 additions and 84 deletions
@ -1,40 +1,25 @@ |
|||||||
from constance import config |
|
||||||
from constance.admin import get_values, ConstanceForm |
|
||||||
from rest_framework import serializers |
from rest_framework import serializers |
||||||
from rest_framework.fields import SkipField |
|
||||||
from collections import OrderedDict |
|
||||||
|
|
||||||
|
from apps.config.models import Config |
||||||
|
|
||||||
def _set_constance_value(key, value): |
|
||||||
form = ConstanceForm(initial=get_values()) |
|
||||||
field = form.fields[key] |
|
||||||
clean_value = field.clean(field.to_python(value)) |
|
||||||
setattr(config, key, clean_value) |
|
||||||
|
|
||||||
|
class ConfigSerializer(serializers.ModelSerializer): |
||||||
class ConfigSerializer(serializers.Serializer): |
|
||||||
SERVICE_COMMISSION = serializers.IntegerField(required=False) |
SERVICE_COMMISSION = serializers.IntegerField(required=False) |
||||||
SERVICE_DISCOUNT_MIN_AMOUNT = serializers.IntegerField(required=False) |
SERVICE_DISCOUNT_MIN_AMOUNT = serializers.IntegerField(required=False) |
||||||
SERVICE_DISCOUNT = serializers.IntegerField(required=False) |
SERVICE_DISCOUNT = serializers.IntegerField(required=False) |
||||||
INSTAGRAM_CLIENT_ACCESS_TOKEN = serializers.CharField(required=False) |
INSTAGRAM_CLIENT_ACCESS_TOKEN = serializers.CharField(required=False) |
||||||
INSTAGRAM_CLIENT_SECRET = serializers.CharField(required=False) |
INSTAGRAM_CLIENT_SECRET = serializers.CharField(required=False) |
||||||
INSTAGRAM_PROFILE_URL = serializers.CharField(required=False) |
INSTAGRAM_PROFILE_URL = serializers.CharField(required=False) |
||||||
# SCHOOL_LOGO_IMAGE = serializers.ImageField(required=False) |
SCHOOL_LOGO_IMAGE = serializers.ImageField(required=False) |
||||||
|
|
||||||
def to_representation(self, instance): |
|
||||||
ret = OrderedDict() |
|
||||||
fields = self._readable_fields |
|
||||||
for field in fields: |
|
||||||
attribute = instance.get(field.field_name) |
|
||||||
ret[field.field_name] = field.to_representation(attribute) |
|
||||||
return ret |
|
||||||
|
|
||||||
def to_internal_value(self, data): |
|
||||||
ret = OrderedDict(get_values()) |
|
||||||
for k, v in data.items(): |
|
||||||
ret[k] = v |
|
||||||
return ret |
|
||||||
|
|
||||||
def update(self, instance, validated_data): |
class Meta: |
||||||
for k, v in validated_data.items(): |
model = Config |
||||||
_set_constance_value(k, v) |
fields = ( |
||||||
|
'SERVICE_COMMISSION', |
||||||
|
'SERVICE_DISCOUNT_MIN_AMOUNT', |
||||||
|
'SERVICE_DISCOUNT', |
||||||
|
'INSTAGRAM_CLIENT_ACCESS_TOKEN', |
||||||
|
'INSTAGRAM_CLIENT_SECRET', |
||||||
|
'INSTAGRAM_PROFILE_URL', |
||||||
|
'SCHOOL_LOGO_IMAGE', |
||||||
|
) |
||||||
|
|||||||
@ -0,0 +1,3 @@ |
|||||||
|
from django.contrib import admin |
||||||
|
|
||||||
|
# Register your models here. |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
from django.apps import AppConfig |
||||||
|
|
||||||
|
|
||||||
|
class ConfigConfig(AppConfig): |
||||||
|
name = 'config' |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
# Generated by Django 2.0.3 on 2018-03-26 10:25 |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
initial = True |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.CreateModel( |
||||||
|
name='Config', |
||||||
|
fields=[ |
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||||
|
('INSTAGRAM_CLIENT_ACCESS_TOKEN', models.CharField(default='7145314808.f6fa114.6b737a5355534e0eb5cf7c40cb4998f6', max_length=51)), |
||||||
|
('INSTAGRAM_CLIENT_SECRET', models.CharField(default='2334a921425140ccb180d145dcd35b25', max_length=32)), |
||||||
|
('INSTAGRAM_PROFILE_URL', models.CharField(default='#', max_length=126)), |
||||||
|
('SERVICE_COMMISSION', models.IntegerField(default=10)), |
||||||
|
('SERVICE_DISCOUNT_MIN_AMOUNT', models.IntegerField(default=3500)), |
||||||
|
('SERVICE_DISCOUNT', models.ImageField(default=1000, upload_to='')), |
||||||
|
('SCHOOL_LOGO_IMAGE', models.ImageField(null=True, upload_to='')), |
||||||
|
], |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,18 @@ |
|||||||
|
# Generated by Django 2.0.3 on 2018-03-26 10:26 |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('config', '0001_initial'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterField( |
||||||
|
model_name='config', |
||||||
|
name='SCHOOL_LOGO_IMAGE', |
||||||
|
field=models.FileField(null=True, upload_to=''), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
# Generated by Django 2.0.3 on 2018-03-26 10:27 |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('config', '0002_auto_20180326_1026'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterField( |
||||||
|
model_name='config', |
||||||
|
name='SCHOOL_LOGO_IMAGE', |
||||||
|
field=models.ImageField(null=True, upload_to=''), |
||||||
|
), |
||||||
|
migrations.AlterField( |
||||||
|
model_name='config', |
||||||
|
name='SERVICE_DISCOUNT', |
||||||
|
field=models.IntegerField(default=1000), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
from django.db import models |
||||||
|
|
||||||
|
|
||||||
|
class Config(models.Model): |
||||||
|
INSTAGRAM_CLIENT_ACCESS_TOKEN = models.CharField( |
||||||
|
max_length=51, default='7145314808.f6fa114.6b737a5355534e0eb5cf7c40cb4998f6' |
||||||
|
) |
||||||
|
INSTAGRAM_CLIENT_SECRET = models.CharField(max_length=32, default='2334a921425140ccb180d145dcd35b25') |
||||||
|
INSTAGRAM_PROFILE_URL = models.CharField(max_length=126, default='#') |
||||||
|
SERVICE_COMMISSION = models.IntegerField(default=10) |
||||||
|
SERVICE_DISCOUNT_MIN_AMOUNT = models.IntegerField(default=3500) |
||||||
|
SERVICE_DISCOUNT = models.IntegerField(default=1000) |
||||||
|
SCHOOL_LOGO_IMAGE = models.ImageField(null=True) |
||||||
|
|
||||||
|
def save(self, *args, **kwargs): |
||||||
|
self.pk = 1 |
||||||
|
super().save(*args, **kwargs) |
||||||
|
|
||||||
|
def delete(self, *args, **kwargs): |
||||||
|
pass |
||||||
|
|
||||||
|
@classmethod |
||||||
|
def load(cls): |
||||||
|
obj, created = cls.objects.get_or_create(pk=1) |
||||||
|
return obj |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
from django.test import TestCase |
||||||
|
|
||||||
|
# Create your tests here. |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
from django.shortcuts import render |
||||||
|
|
||||||
|
# Create your views here. |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
from apps.config.models import Config |
||||||
|
|
||||||
|
|
||||||
|
def config(request): |
||||||
|
return {"config": Config.load()} |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
from django.forms import ImageField as BaseImageField |
||||||
|
|
||||||
|
|
||||||
|
class ImageField(BaseImageField): |
||||||
|
|
||||||
|
def to_internal_value(self, data): |
||||||
|
# if data is None image field was not uploaded |
||||||
|
if data: |
||||||
|
file_object = super(ImageField, self).to_internal_value(data) |
||||||
|
django_field = self._DjangoImageField() |
||||||
|
django_field.error_messages = self.error_messages |
||||||
|
django_field.to_python(file_object) |
||||||
|
return file_object |
||||||
|
return data |
||||||
Loading…
Reference in new issue