コード例 #1
0
ファイル: models.py プロジェクト: nimbis/django-any
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill local fields
    for field in model._meta.fields:
        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                value = key_field.rel.to.objects.get(kwargs[field.name])
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(field, models.OneToOneField) and field.rel.parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        else:
            setattr(model, field.name, any_field(field, **fields_args[field.name]))

    # procceed reversed relations
    onetoone = [(relation.var_name, relation.field) \
                for relation in model._meta.get_all_related_objects() \
                if relation.field.unique] # TODO and not relation.field.rel.parent_link ??
    for field_name, field in onetoone:
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #2
0
ファイル: models.py プロジェクト: kipanshi/django-any
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill virtual fields
    for field in model._meta.virtual_fields:
        if field.name in model_fields:
            object = kwargs[field.name]
            model_fields[field.ct_field] = kwargs[field.ct_field] = ContentType.objects.get_for_model(object)
            model_fields[field.fk_field] = kwargs[field.fk_field] = object.id
    # fill local fields
    for field in model._meta.fields:
        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                # Handle situation if lookup returns multiple objects
                try:
                    value = key_field.rel.to.objects.get(kwargs[field.name])
                except MultipleObjectsReturned:
                    queryset = key_field.rel.to.objects.filter(kwargs[field.name])
                    queryset_count = queryset.count()
                    value = queryset[randint(0, queryset_count - 1)]
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(field, models.OneToOneField) and field.rel.parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        elif isinstance(field, models.fields.related.ForeignKey) and field.model == field.rel.to:
            """
            skip self relations
            """
        else:
            setattr(model, field.name, any_field(field, **fields_args[field.name]))

    # procceed reversed relations
    onetoone = [
        (relation.var_name, relation.field)
        for relation in model._meta.get_all_related_objects()
        if relation.field.unique
    ]  # TODO and not relation.field.rel.parent_link ??
    for field_name, field in onetoone:
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #3
0
ファイル: models.py プロジェクト: vice-versa/django-whatever
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill virtual fields
    for field in model._meta.virtual_fields:
        if field.name in model_fields:
            object = kwargs[field.name]
            model_fields[field.ct_field] = kwargs[field.ct_field]= ContentType.objects.get_for_model(object)
            model_fields[field.fk_field] = kwargs[field.fk_field]= object.id
    # collect ignore fields
    ignored_fields = collect_ignored_fields(model, **kwargs)

    # fill local fields
    for field in model._meta.fields:

        if field.name in ignored_fields:
            # Pass ignored fields
            continue

        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                value = key_field.rel.to.objects.get(kwargs[field.name])
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(field, models.OneToOneField) and field.rel.parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        elif isinstance(field, models.fields.related.ForeignKey) and field.model == field.rel.to:
            """
            skip self relations
            """
        else:
            setattr(model, field.name, any_field(field, **fields_args[field.name]))

    # procceed reversed relations
    onetoone = [(relation.var_name, relation.field) \
                for relation in model._meta.get_all_related_objects() \
                if relation.field.unique] # TODO and not relation.field.rel.parent_link ??
    for field_name, field in onetoone:
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #4
0
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill virtual fields
    for field in model._meta.virtual_fields:
        if field.name in model_fields:
            object = kwargs[field.name]
            model_fields[field.ct_field] = kwargs[field.ct_field]= ContentType.objects.get_for_model(object)
            model_fields[field.fk_field] = kwargs[field.fk_field]= object.id
    # fill local fields
    for field in model._meta.fields:
        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                # Handle situation if lookup returns multiple objects
                try:
                    value = key_field.rel.to.objects.get(kwargs[field.name])
                except MultipleObjectsReturned:
                    queryset = key_field.rel.to.objects.filter(
                                                        kwargs[field.name])
                    queryset_count = queryset.count()
                    value = queryset[randint(0, queryset_count - 1)]
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(field, models.OneToOneField) and field.rel.parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        elif isinstance(field, models.fields.related.ForeignKey) and field.model == field.rel.to:
            """
            skip self relations
            """
        else:
            setattr(model, field.name, any_field(field, **fields_args[field.name]))

    # procceed reversed relations
    onetoone = [(relation.var_name, relation.field) \
                for relation in model._meta.get_all_related_objects() \
                if relation.field.unique] # TODO and not relation.field.rel.parent_link ??
    for field_name, field in onetoone:
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #5
0
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill virtual fields
    for field in model._meta.virtual_fields:
        if field.name in model_fields:
            object = kwargs[field.name]
            model_fields[field.ct_field] = kwargs[field.ct_field]= ContentType.objects.get_for_model(object)
            model_fields[field.fk_field] = kwargs[field.fk_field]= object.id
    # fill local fields
    for field in model._meta.fields:
        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                value = key_field.rel.to.objects.get(kwargs[field.name])
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(field, models.OneToOneField) and field.rel.parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        elif isinstance(field, models.fields.related.ForeignKey) and field.model == field.rel.to:
            """
            skip self relations
            """
        else:
            setattr(model, field.name, any_field(field, **fields_args[field.name]))

    # TODO dunno what I did here but seems like it works (I hope)
    if django.VERSION >= (1, 8):
        onetoone = [(relation.name, relation)
                    for relation in model._meta.get_fields()
                    if relation.one_to_one and relation.auto_created]
    else:
        # procceed reversed relations
        onetoone = [(relation.var_name, relation.field) \
                    for relation in model._meta.get_all_related_objects() \
                    if relation.field.unique] # TODO and not relation.field.rel.parent_link ??

    for field_name, field in onetoone:
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #6
0
ファイル: models.py プロジェクト: gelo-zhukov/django-whatever
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill virtual fields
    for field in model._meta.private_fields:
        if field.name in model_fields:
            object = kwargs[field.name]
            model_fields[field.ct_field] = kwargs[
                field.ct_field] = ContentType.objects.get_for_model(object)
            model_fields[field.fk_field] = kwargs[field.fk_field] = object.id
    # fill local fields
    for field in model._meta.fields:
        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                value = key_field.remote_field.model.objects.get(
                    kwargs[field.name])
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(
                field,
                models.OneToOneField) and field.remote_field.parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        elif isinstance(field, models.fields.related.ForeignKey
                        ) and field.model == field.remote_field.model:
            """
            skip self relations
            """
        else:
            setattr(model, field.name,
                    any_field(field, **fields_args[field.name]))

    onetoone_fields = [(relation.name, relation)
                       for relation in model._meta.get_fields()
                       if relation.one_to_one and relation.auto_created]
    for field_name, field in onetoone_fields:
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #7
0
ファイル: forms.py プロジェクト: kneckinator/django-whatever
def any_form_default(form_cls, **kwargs):
    """
    Returns tuple with form data and files
    """
    form_data = {}
    form_files = {}

    form_fields, fields_args = split_model_kwargs(kwargs)

    for name, field in form_cls.base_fields.iteritems():
        if name in form_fields:
            form_data[name] = kwargs[name]
        else:
            form_data[name] = any_form_field(field, **fields_args[name])

    return form_data, form_files
コード例 #8
0
ファイル: models.py プロジェクト: hovel/django-whatever
def _fill_model_fields(model, **kwargs):
    model_fields, fields_args = split_model_kwargs(kwargs)

    # fill virtual fields
    for field in compat.get_model_private_fields(model):
        if field.name in model_fields:
            object = kwargs[field.name]
            model_fields[field.ct_field] = kwargs[field.ct_field]= ContentType.objects.get_for_model(object)
            model_fields[field.fk_field] = kwargs[field.fk_field]= object.id
    # fill local fields
    for field in model._meta.fields:
        if field.name in model_fields:
            if isinstance(kwargs[field.name], Q):
                """
                Lookup ForeingKey field in db
                """
                key_field = model._meta.get_field(field.name)
                value = compat.get_remote_field_model(key_field).objects.get(kwargs[field.name])
                setattr(model, field.name, value)
            else:
                # TODO support any_model call
                setattr(model, field.name, kwargs[field.name])
        elif isinstance(field, models.OneToOneField) and compat.get_remote_field(field).parent_link:
            """
            skip link to parent instance
            """
        elif isinstance(field, models.fields.AutoField):
            """
            skip primary key field
            """
        elif isinstance(field, models.fields.related.ForeignKey) and field.model == compat.get_remote_field_model(field):
            """
            skip self relations
            """
        else:
            setattr(model, field.name, any_field(field, **fields_args[field.name]))

    for field_name, field in compat.get_model_onetoone_fields(model):
        if field_name in model_fields:
            # TODO support any_model call
            setattr(model, field_name, kwargs[field_name])
コード例 #9
0
def any_form_default(form_cls, **kwargs):
    """
    Returns tuple with form data and files
    """
    form_data = {}
    form_files = {}

    form_fields, fields_args = split_model_kwargs(kwargs)

    for name, field in form_cls.base_fields.items():
        if name in form_fields:
            form_data[name] = kwargs[name]
        else:
            try:
                form_field_data = any_form_field(field, **fields_args[name])
            except Exception:
                if field.required:
                    raise
            else:
                form_data[name] = form_field_data

    return form_data, form_files
コード例 #10
0
ファイル: forms.py プロジェクト: coagulant/django-whatever
def any_form_default(form_cls, **kwargs):
    """
    Returns tuple with form data and files
    """
    form_data = {}
    form_files = {}

    form_fields, fields_args = split_model_kwargs(kwargs)

    for name, field in six.iteritems(form_cls.base_fields):
        if name in form_fields:
            form_data[name] = kwargs[name]
        else:
            try:
                form_field_data = any_form_field(field, **fields_args[name])
            except Exception as e:
                if field.required:
                    raise
            else:
                form_data[name] = form_field_data

    return form_data, form_files