Python django.db.models.ManyToManyField() Examples
The following are 30
code examples of django.db.models.ManyToManyField().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
django.db.models
, or try the search function
.
Example #1
Source File: related.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def _check_ignored_options(self, **kwargs): warnings = [] if self.null: warnings.append( checks.Warning( 'null has no effect on ManyToManyField.', hint=None, obj=self, id='fields.W340', ) ) if len(self._validators) > 0: warnings.append( checks.Warning( 'ManyToManyField does not support validators.', hint=None, obj=self, id='fields.W341', ) ) return warnings
Example #2
Source File: decorator.py From FIR with GNU General Public License v3.0 | 6 votes |
def has_perm(self, user, permission): if user.is_superuser: return True if isinstance(permission, six.string_types): permission = [permission, ] if user.has_perms(permission): return True if self._authorization_meta.owner_field and self._authorization_meta.owner_permission and \ self._authorization_meta.owner_permission in permission and \ user.pk == getattr(self, self._authorization_meta.owner_field).pk: return True paths = self._authorization_meta.model.get_authorization_paths(user, permission) if not paths.count(): return False for field in self._authorization_meta.fields: f = self._meta.get_field(field) relation = getattr(self, field) if isinstance(f, models.ManyToManyField): qs_filter = reduce(lambda x, y: x | y, [Q(path__startswith=path) for path in paths]) if relation.filter(qs_filter).distinct().exists(): return True elif isinstance(f, models.ForeignKey): if relation is not None and any(relation.path.startswith(p) for p in paths): return True return False
Example #3
Source File: validation.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def validate_list_display(self, cls, model): " Validate that list_display only contains fields or usable attributes. " if hasattr(cls, 'list_display'): check_isseq(cls, 'list_display', cls.list_display) for idx, field in enumerate(cls.list_display): if not callable(field): if not hasattr(cls, field): if not hasattr(model, field): try: model._meta.get_field(field) except FieldDoesNotExist: raise ImproperlyConfigured( "%s.list_display[%d], %r is not a callable or " "an attribute of %r or found in the model %r." % (cls.__name__, idx, field, cls.__name__, model._meta.object_name) ) else: # getattr(model, field) could be an X_RelatedObjectsDescriptor f = fetch_attr(cls, model, "list_display[%d]" % idx, field) if isinstance(f, models.ManyToManyField): raise ImproperlyConfigured( "'%s.list_display[%d]', '%s' is a ManyToManyField " "which is not supported." % (cls.__name__, idx, field) )
Example #4
Source File: checks.py From bioforum with MIT License | 6 votes |
def _check_prepopulated_fields_key(self, obj, model, field_name, label): """ Check a key of `prepopulated_fields` dictionary, i.e. check that it is a name of existing field and the field is one of the allowed types. """ try: field = model._meta.get_field(field_name) except FieldDoesNotExist: return refer_to_missing_field(field=field_name, option=label, model=model, obj=obj, id='admin.E027') else: if isinstance(field, (models.DateTimeField, models.ForeignKey, models.ManyToManyField)): return [ checks.Error( "The value of '%s' refers to '%s', which must not be a DateTimeField, " "a ForeignKey, a OneToOneField, or a ManyToManyField." % (label, field_name), obj=obj.__class__, id='admin.E028', ) ] else: return []
Example #5
Source File: models.py From django-idcops with Apache License 2.0 | 6 votes |
def _dict(self): exclude = ['operator_id', 'creator_id', 'created', 'modified'] opts = self._meta data = {} keys = [f.attname for f in opts.fields] for f in chain(opts.many_to_many): #if isinstance(f, models.ManyToManyField): if self.pk is None: data[f.name] = [] else: data[f.name] = list(f.value_from_object(self).values_list('pk', flat=True)) original = { k:self.__dict__.get(k) for k in keys if k not in exclude } data.update(**original) for key, value in data.items(): if isinstance(value, timezone.datetime): value = formats.localize(timezone.template_localtime(value)) data.update(**{key: value}) return data
Example #6
Source File: related.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def __set__(self, instance, value): if not self.field.rel.through._meta.auto_created: opts = self.field.rel.through._meta raise AttributeError( "Cannot set values on a ManyToManyField which specifies an " "intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name) ) # Force evaluation of `value` in case it's a queryset whose # value could be affected by `manager.clear()`. Refs #19816. value = tuple(value) manager = self.__get__(instance) db = router.db_for_write(manager.through, instance=manager.instance) with transaction.atomic(using=db, savepoint=False): manager.clear() manager.add(*value)
Example #7
Source File: related.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def __set__(self, instance, value): if not self.related.field.rel.through._meta.auto_created: opts = self.related.field.rel.through._meta raise AttributeError( "Cannot set values on a ManyToManyField which specifies an " "intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name) ) # Force evaluation of `value` in case it's a queryset whose # value could be affected by `manager.clear()`. Refs #19816. value = tuple(value) manager = self.__get__(instance) db = router.db_for_write(manager.through, instance=manager.instance) with transaction.atomic(using=db, savepoint=False): manager.clear() manager.add(*value)
Example #8
Source File: quickform.py From CTF_AWD_Platform with MIT License | 5 votes |
def formfield_for_dbfield(self, formfield, db_field, **kwargs): if formfield and self.model in self.admin_site._registry and isinstance(db_field, (models.ForeignKey, models.ManyToManyField)): rel_model = get_model_from_relation(db_field) if rel_model in self.admin_site._registry and self.has_model_perm(rel_model, 'add'): add_url = self.get_model_url(rel_model, 'add') formfield.widget = RelatedFieldWidgetWrapper( formfield.widget, db_field.remote_field, add_url, self.get_model_url(self.model, 'add')) return formfield
Example #9
Source File: edit.py From weibo-analysis-system with MIT License | 5 votes |
def get_field_style(self, db_field, style, **kwargs): if style in ('radio', 'radio-inline') and (db_field.choices or isinstance(db_field, models.ForeignKey)): attrs = {'widget': widgets.AdminRadioSelect( attrs={'inline': 'inline' if style == 'radio-inline' else ''})} if db_field.choices: attrs['choices'] = db_field.get_choices( include_blank=db_field.blank, blank_choice=[('', _('Null'))] ) return attrs if style in ('checkbox', 'checkbox-inline') and isinstance(db_field, models.ManyToManyField): return {'widget': widgets.AdminCheckboxSelect(attrs={'inline': style == 'checkbox-inline'}), 'help_text': None}
Example #10
Source File: edit.py From weibo-analysis-system with MIT License | 5 votes |
def get_form_datas(self): # Prepare the dict of initial data from the request. # We have to special-case M2Ms as a list of comma-separated PKs. if self.request_method == 'get': initial = dict(self.request.GET.items()) for k in initial: try: f = self.opts.get_field(k) except models.FieldDoesNotExist: continue if isinstance(f, models.ManyToManyField): initial[k] = initial[k].split(",") return {'initial': initial} else: return {'data': self.request.POST, 'files': self.request.FILES}
Example #11
Source File: multiselect.py From weibo-analysis-system with MIT License | 5 votes |
def get_field_style(self, attrs, db_field, style, **kwargs): if style == 'm2m_transfer' and isinstance(db_field, ManyToManyField): return {'widget': SelectMultipleTransfer(db_field.verbose_name, False), 'help_text': ''} if style == 'm2m_dropdown' and isinstance(db_field, ManyToManyField): return {'widget': SelectMultipleDropdown, 'help_text': ''} return attrs
Example #12
Source File: quickform.py From weibo-analysis-system with MIT License | 5 votes |
def formfield_for_dbfield(self, formfield, db_field, **kwargs): if formfield and self.model in self.admin_site._registry and isinstance(db_field, (models.ForeignKey, models.ManyToManyField)): rel_model = get_model_from_relation(db_field) if rel_model in self.admin_site._registry and self.has_model_perm(rel_model, 'add'): add_url = self.get_model_url(rel_model, 'add') formfield.widget = RelatedFieldWidgetWrapper( formfield.widget, db_field.remote_field, add_url, self.get_model_url(self.model, 'add')) return formfield
Example #13
Source File: multiselect.py From django_OA with GNU General Public License v3.0 | 5 votes |
def get_field_style(self, attrs, db_field, style, **kwargs): if style == 'm2m_transfer' and isinstance(db_field, ManyToManyField): return {'widget': SelectMultipleTransfer(db_field.verbose_name, False), 'help_text': ''} if style == 'm2m_dropdown' and isinstance(db_field, ManyToManyField): return {'widget': SelectMultipleDropdown, 'help_text': ''} return attrs
Example #14
Source File: related.py From Hands-On-Application-Development-with-PyCharm with MIT License | 5 votes |
def _check_ignored_options(self, **kwargs): warnings = [] if self.has_null_arg: warnings.append( checks.Warning( 'null has no effect on ManyToManyField.', obj=self, id='fields.W340', ) ) if self._validators: warnings.append( checks.Warning( 'ManyToManyField does not support validators.', obj=self, id='fields.W341', ) ) if (self.remote_field.limit_choices_to and self.remote_field.through and not self.remote_field.through._meta.auto_created): warnings.append( checks.Warning( 'limit_choices_to has no effect on ManyToManyField ' 'with a through model.', obj=self, id='fields.W343', ) ) return warnings
Example #15
Source File: edit.py From django_OA with GNU General Public License v3.0 | 5 votes |
def formfield_for_dbfield(self, db_field, **kwargs): # If it uses an intermediary model that isn't auto created, don't show # a field in admin. if isinstance(db_field, models.ManyToManyField) and not db_field.remote_field.through._meta.auto_created: return None attrs = self.get_field_attrs(db_field, **kwargs) return db_field.formfield(**dict(attrs, **kwargs))
Example #16
Source File: edit.py From django_OA with GNU General Public License v3.0 | 5 votes |
def get_field_style(self, db_field, style, **kwargs): if style in ('radio', 'radio-inline') and (db_field.choices or isinstance(db_field, models.ForeignKey)): attrs = {'widget': widgets.AdminRadioSelect( attrs={'inline': 'inline' if style == 'radio-inline' else ''})} if db_field.choices: attrs['choices'] = db_field.get_choices( include_blank=db_field.blank, blank_choice=[('', _('Null'))] ) return attrs if style in ('checkbox', 'checkbox-inline') and isinstance(db_field, models.ManyToManyField): return {'widget': widgets.AdminCheckboxSelect(attrs={'inline': style == 'checkbox-inline'}), 'help_text': None}
Example #17
Source File: edit.py From django_OA with GNU General Public License v3.0 | 5 votes |
def get_form_datas(self): # Prepare the dict of initial data from the request. # We have to special-case M2Ms as a list of comma-separated PKs. if self.request_method == 'get': initial = dict(self.request.GET.items()) for k in initial: try: f = self.opts.get_field(k) except models.FieldDoesNotExist: continue if isinstance(f, models.ManyToManyField): initial[k] = initial[k].split(",") return {'initial': initial} else: return {'data': self.request.POST, 'files': self.request.FILES}
Example #18
Source File: related.py From Hands-On-Application-Development-with-PyCharm with MIT License | 5 votes |
def __init__(self, to, related_name=None, related_query_name=None, limit_choices_to=None, symmetrical=None, through=None, through_fields=None, db_constraint=True, db_table=None, swappable=True, **kwargs): try: to._meta except AttributeError: assert isinstance(to, str), ( "%s(%r) is invalid. First parameter to ManyToManyField must be " "either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT) ) if symmetrical is None: symmetrical = (to == RECURSIVE_RELATIONSHIP_CONSTANT) if through is not None: assert db_table is None, ( "Cannot specify a db_table if an intermediary model is used." ) kwargs['rel'] = self.rel_class( self, to, related_name=related_name, related_query_name=related_query_name, limit_choices_to=limit_choices_to, symmetrical=symmetrical, through=through, through_fields=through_fields, db_constraint=db_constraint, ) self.has_null_arg = 'null' in kwargs super().__init__(**kwargs) self.db_table = db_table self.swappable = swappable
Example #19
Source File: edit.py From myblog with GNU Affero General Public License v3.0 | 5 votes |
def get_field_style(self, db_field, style, **kwargs): if style in ('radio', 'radio-inline') and (db_field.choices or isinstance(db_field, models.ForeignKey)): attrs = {'widget': widgets.AdminRadioSelect( attrs={'inline': 'inline' if style == 'radio-inline' else ''})} if db_field.choices: attrs['choices'] = db_field.get_choices( include_blank=db_field.blank, blank_choice=[('', _('Null'))] ) return attrs if style in ('checkbox', 'checkbox-inline') and isinstance(db_field, models.ManyToManyField): return {'widget': widgets.AdminCheckboxSelect(attrs={'inline': style == 'checkbox-inline'}), 'help_text': None}
Example #20
Source File: edit.py From weibo-analysis-system with MIT License | 5 votes |
def formfield_for_dbfield(self, db_field, **kwargs): # If it uses an intermediary model that isn't auto created, don't show # a field in admin. if isinstance(db_field, models.ManyToManyField) and not db_field.remote_field.through._meta.auto_created: return None attrs = self.get_field_attrs(db_field, **kwargs) return db_field.formfield(**dict(attrs, **kwargs))
Example #21
Source File: test_Serializer.py From django-simple-serializer with BSD 2-Clause "Simplified" License | 5 votes |
def setUp(self): self.time_func = TimeFormatFactory.get_time_func('string') # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': ':memory:', # 'USER': '', # Not used with sqlite3. # 'PASSWORD': '', # Not used with sqlite3. # 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. # 'PORT': '', # } # } # settings.configure(DATABASES=DATABASES, DEBUG=True) # class TestAuthor(models.Model): # name = models.CharField(default='test_author') # # def __unicode__(self): # return self.name # # class TestTags(models.Model): # tag = models.CharField(default='test_tag') # create_time = models.DateTimeField(auto_now=True) # # class TestArticle(models.Model): # title = models.CharField(default='test') # content = models.CharField(default='test') # author = models.ForeignKey(TestAuthor, related_name='author_art') # tags = models.ManyToManyField(TestTags, related_name='tag_art') # create_time = models.DateTimeField(auto_now=True) # # # self.author = TestAuthor() # self.author.save() # tags = TestTags(tag='tag1') # tags.save() # self.article = TestArticle(author=self.author) # self.article.tags.add(tags) # self.article.save()
Example #22
Source File: utils.py From meeting with GNU General Public License v3.0 | 5 votes |
def __init__(self, to, related_name=None, related_query_name=None, limit_choices_to=None, symmetrical=None, through=None, through_fields=None, db_constraint=False, db_table=None, swappable=True, **kwargs): super(ManyToManyField, self).__init__(to, related_name, related_query_name, limit_choices_to, symmetrical, through, through_fields, db_constraint, db_table, swappable, **kwargs)
Example #23
Source File: configuration.py From jet-bridge with MIT License | 5 votes |
def get_model_fields(self, model): fields = model._meta.get_fields() def filter_fields(x): if any(map(lambda rel: isinstance(x, rel), [ models.ManyToOneRel, models.ManyToManyField, models.ManyToManyRel, GenericRel, GenericForeignKey, GenericRelation ])): return False return True return filter(filter_fields, fields)
Example #24
Source File: configuration.py From jet-bridge with MIT License | 5 votes |
def get_related_models(self, model): fields = model._meta.get_fields(include_hidden=True) def filter_fields(x): if any(map(lambda rel: isinstance(x, rel), [ models.OneToOneRel, models.OneToOneField, models.ManyToOneRel, models.ManyToManyField, models.ManyToManyRel ])): return True return False return list(map(lambda x: x.related_model, filter(filter_fields, fields)))
Example #25
Source File: options.py From bioforum with MIT License | 5 votes |
def get_changeform_initial_data(self, request): """ Get the initial form data from the request's GET params. """ initial = dict(request.GET.items()) for k in initial: try: f = self.model._meta.get_field(k) except FieldDoesNotExist: continue # We have to special-case M2Ms as a list of comma-separated PKs. if isinstance(f, models.ManyToManyField): initial[k] = initial[k].split(",") return initial
Example #26
Source File: checks.py From bioforum with MIT License | 5 votes |
def _check_filter_item(self, obj, model, field_name, label): """ Check one item of `filter_vertical` or `filter_horizontal`, i.e. check that given field exists and is a ManyToManyField. """ try: field = model._meta.get_field(field_name) except FieldDoesNotExist: return refer_to_missing_field(field=field_name, option=label, model=model, obj=obj, id='admin.E019') else: if not field.many_to_many: return must_be('a many-to-many field', option=label, obj=obj, id='admin.E020') else: return []
Example #27
Source File: checks.py From bioforum with MIT License | 5 votes |
def _check_field_spec_item(self, obj, model, field_name, label): if field_name in obj.readonly_fields: # Stuff can be put in fields that isn't actually a model field if # it's in readonly_fields, readonly_fields will handle the # validation of such things. return [] else: try: field = model._meta.get_field(field_name) except FieldDoesNotExist: # If we can't find a field on the model that matches, it could # be an extra field on the form. return [] else: if (isinstance(field, models.ManyToManyField) and not field.remote_field.through._meta.auto_created): return [ checks.Error( "The value of '%s' cannot include the ManyToManyField '%s', " "because that field manually specifies a relationship model." % (label, field_name), obj=obj.__class__, id='admin.E013', ) ] else: return []
Example #28
Source File: related.py From bioforum with MIT License | 5 votes |
def db_type(self, connection): # A ManyToManyField is not represented by a single column, # so return None. return None
Example #29
Source File: related.py From bioforum with MIT License | 5 votes |
def _check_ignored_options(self, **kwargs): warnings = [] if self.has_null_arg: warnings.append( checks.Warning( 'null has no effect on ManyToManyField.', obj=self, id='fields.W340', ) ) if len(self._validators) > 0: warnings.append( checks.Warning( 'ManyToManyField does not support validators.', obj=self, id='fields.W341', ) ) if (self.remote_field.limit_choices_to and self.remote_field.through and not self.remote_field.through._meta.auto_created): warnings.append( checks.Warning( 'limit_choices_to has no effect on ManyToManyField ' 'with a through model.', obj=self, id='fields.W343', ) ) return warnings
Example #30
Source File: related.py From bioforum with MIT License | 5 votes |
def __init__(self, to, related_name=None, related_query_name=None, limit_choices_to=None, symmetrical=None, through=None, through_fields=None, db_constraint=True, db_table=None, swappable=True, **kwargs): try: to._meta except AttributeError: assert isinstance(to, str), ( "%s(%r) is invalid. First parameter to ManyToManyField must be " "either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT) ) if symmetrical is None: symmetrical = (to == RECURSIVE_RELATIONSHIP_CONSTANT) if through is not None: assert db_table is None, ( "Cannot specify a db_table if an intermediary model is used." ) kwargs['rel'] = self.rel_class( self, to, related_name=related_name, related_query_name=related_query_name, limit_choices_to=limit_choices_to, symmetrical=symmetrical, through=through, through_fields=through_fields, db_constraint=db_constraint, ) self.has_null_arg = 'null' in kwargs super().__init__(**kwargs) self.db_table = db_table self.swappable = swappable