Esempio n. 1
0
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])
Esempio n. 2
0
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])
Esempio n. 3
0
def any_model_with_defaults(cls, **attrs):
    """Use model-provided defaults"""

    for field in cls._meta.fields:
        default = field.default
        if default is not NOT_PROVIDED:
            if callable(default):
                # for stuff like default=datetime.now
                default = default()
            if isinstance(field, (ForeignKey, OneToOneField)):
                Model = compat.get_remote_field_model(field)
                if not isinstance(default, Model):
                    try:
                        default = Model.objects.get(pk=default)
                    except Model.DoesNotExist:
                        pass
            attrs.setdefault(field.name, default)

    return any_model(cls, **attrs)
Esempio n. 4
0
def any_onetoone_field(field, **kwargs):
    return any_model(compat.get_remote_field_model(field), **kwargs)
Esempio n. 5
0
def any_foreignkey_field(field, **kwargs):
    return any_model(compat.get_remote_field_model(field), **kwargs)
Esempio n. 6
0
def any_onetoone_field(field, **kwargs):
    return any_model(compat.get_remote_field_model(field), **kwargs)
Esempio n. 7
0
def any_foreignkey_field(field, **kwargs):
    return any_model(compat.get_remote_field_model(field), **kwargs)