示例#1
0
class WriteOnlyFieldsSerializer(serializers.ModelSerializer):
    form_titles = {
        'table': 'Write only fields list',
        'new': 'New write only fields object',
        'edit': 'Editing write only fields object',
    }

    regex_field = fields.CharField(label='Hidden', write_only=True)
    choice_field = fields.CharField(label='Shown',
                                    write_only=True,
                                    display=DisplayMode.FULL)

    class Meta:
        model = AdvancedFields
        fields = ('id', 'regex_field', 'choice_field')
示例#2
0
class RelationSerializer(serializers.ModelSerializer):
    form_titles = {
        'table': 'Relation fields list',
        'new': 'New relation object',
        'edit': 'Editing relation object',
    }

    name = fields.CharField()

    class Meta:
        model = Relation
        exclude = ()
示例#3
0
class BasicFieldsSerializer(serializers.ModelSerializer):
    form_titles = {
        'table': 'Basic fields list',
        'new': 'New basic fields object',
        'edit': 'Editing basic fields object',
    }
    form_template = 'examples/form_cols.html'

    actions = Actions(TableAction(TablePosition.HEADER,
                                  _('Modal dialog'),
                                  title=_('Dialog test'),
                                  name='modal_dialog',
                                  action_js="examples.testModalDialog();"),
                      add_default_crud=True,
                      add_form_buttons=True)

    boolean_field = fields.BooleanField()
    nullboolean_field = fields.NullBooleanField()
    char_field = fields.CharField()
    email_field = fields.EmailField()
    slug_field = fields.SlugField()
    url_field = fields.URLField()
    uuid_field = fields.UUIDField()
    ipaddress_field = fields.IPAddressField()
    integer_field = fields.IntegerField()
    nullint_field = fields.IntegerField(allow_null=True)
    float_field = fields.FloatField()
    decimal_field = fields.DecimalField(max_digits=5, decimal_places=2)
    datetime_field = fields.DateTimeField(required=False)
    date_field = fields.DateField()
    time_field = fields.TimeField()
    duration_field = fields.DurationField()
    password_field = fields.CharField(password_field=True)

    class Meta:
        model = BasicFields
        exclude = ()
示例#4
0
class UserSerializer(serializers.ModelSerializer):
    form_template = 'usereditor/user_item.html'
    form_titles = {
        'table': _('Users'),
        'new': _('New user'),
        'edit': _('Editing user'),
    }
    actions = Actions(add_default_crud=True, add_default_filter=True)
    show_filter = True

    password = fields.CharField(label=_('Password'), write_only=True, display_table=fields.DisplayMode.SUPPRESS)
    full_name = fields.SerializerMethodField(label=_('Full name'), read_only=True,
                                             display_form=fields.DisplayMode.SUPPRESS)
    username = fields.CharField(label=_('Username'), display_table=fields.DisplayMode.SUPPRESS)
    email = UserEmailField(label=_('Email'), source='*', required=False, allow_blank=True)
    email_verified = fields.SerializerMethodField(display_table=fields.DisplayMode.SUPPRESS)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def suppress_action(self, action, request, viewset):
        if request and request.user and not request.user.is_staff and action.name in ('add', 'edit', 'delete'):
            return True
        return super().suppress_action(action, request, viewset)

    def get_email(self, obj):
        email = None
        if hasattr(obj, 'emailaddress_set'):
            for e in obj.emailaddress_set.all():
                if e.verified and (not email or e.email == obj.email):
                    # email mora biti verificiran, da povozi onega iz userja,
                    #   če pa je še enak za povrh, je pa sploh super
                    email = e

            if email:
                return email.email, email.verified

        return None, False

    def get_full_name(self, obj):
        if not obj.id:
            return ''
        return obj.get_full_name()

    def validate(self, attrs):
        res = super().validate(attrs)
        email = attrs.get('email', None)
        if not email:
            return res

        from allauth.account.models import EmailAddress
        from rest_framework.exceptions import ValidationError

        qry = EmailAddress.objects.filter(email=email)
        if self.instance:
            qry = qry.exclude(user=self.instance)
        if qry.exists():
            raise ValidationError(dict(email=_('This e-mail address is already associated with another account.')))

        return res

    @transaction.atomic
    def create(self, validated_data):
        res = super().create(validated_data)
        self.update_user_settings(res, validated_data)
        return res

    @transaction.atomic
    def update(self, instance, validated_data):
        # noinspection PyTypeChecker
        self.update_user_settings(instance, validated_data)
        return super().update(instance, validated_data)

    @staticmethod
    def update_user_settings(instance, validated_data, *args, **kwargs):
        from allauth.account.models import EmailAddress

        email = validated_data.get('email', None)
        if email and not EmailAddress.objects.filter(user=instance, email=email).exists():
            EmailAddress.objects.filter(user=instance).update(primary=False)
            EmailAddress.objects.create(user=instance, email=email, primary=True, verified=False)

    def get_email_verified(self, rec):
        return self.get_email(rec)[1]

    class Meta:
        model = get_user_model()
        fields = ('id', 'full_name', 'username', 'password', 'first_name', 'last_name', 'is_staff', 'is_superuser',
                  'is_active', 'email', 'email_verified')
        changed_flds = {
            'id': dict(display=DisplayMode.HIDDEN),
        }
        for f in ['first_name', 'last_name', 'is_superuser', 'is_active']:  # type: fields.RenderMixin
            changed_flds[f] = dict(display_table=DisplayMode.SUPPRESS)