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])
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])
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])
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])
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])
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])
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
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])
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
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