def test_render(self): band = models.Band.objects.create(name='Linkin Park') band.album_set.create( name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg' ) rel = models.Album._meta.get_field('band').rel w = ForeignKeyRawIdWidget(rel) self.assertEqual( conditional_escape(w.render('test', band.pk, attrs={})), '<input type="text" name="test" value="%(bandpk)s" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/band/?t=id" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a> <strong>Linkin Park</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "bandpk": band.pk}, )
def test_relations_to_non_primary_key(self): # Check that ForeignKeyRawIdWidget works with fields which aren't # related to the model's primary key. apple = models.Inventory.objects.create(barcode=86, name='Apple') models.Inventory.objects.create(barcode=22, name='Pear') core = models.Inventory.objects.create( barcode=87, name='Core', parent=apple ) rel = models.Inventory._meta.get_field('parent').rel w = ForeignKeyRawIdWidget(rel) self.assertEqual( w.render('test', core.parent_id, attrs={}), '<input type="text" name="test" value="86" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a> <strong>Apple</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}, )
def test_proper_manager_for_label_lookup(self): # see #9258 rel = models.Inventory._meta.get_field('parent').rel w = ForeignKeyRawIdWidget(rel) hidden = models.Inventory.objects.create( barcode=93, name='Hidden', hidden=True ) child_of_hidden = models.Inventory.objects.create( barcode=94, name='Child of hidden', parent=hidden ) self.assertEqual( w.render('test', child_of_hidden.parent_id, attrs={}), '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a> <strong>Hidden</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}, )
def test_proper_manager_for_label_lookup(self): # see #9258 rel = models.Inventory._meta.get_field('parent').rel w = ForeignKeyRawIdWidget(rel) hidden = models.Inventory.objects.create(barcode=93, name='Hidden', hidden=True) child_of_hidden = models.Inventory.objects.create( barcode=94, name='Child of hidden', parent=hidden) self.assertEqual( w.render('test', child_of_hidden.parent_id, attrs={}), '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a> <strong>Hidden</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}, )
def __init__(self, *args, **kwargs): # checking for user argument here for a more # localized form self.user = None self.timezone = None if kwargs.get('instance',None): kwargs['initial'] = kwargs.pop('initial',{}) kwargs['initial']['publish_dt'] = kwargs['instance'].publish_dt if 'user' in kwargs: self.user = kwargs.pop('user', None) super(PostForm, self).__init__(*args, **kwargs) self.fields['publish_dt'].widget = AdminSplitDateTime() self.fields['slug'].help_text = "URL will be /blog/your-name/<b>slug-goes-here</b>/" self.fields['tags'].help_text = "Separate tags with commas. Input will be lowercased." self.fields['publish_dt'].help_text = "<i>YYYY-MM-DD</i> and <i>HH:MM</i> (24-hour time)" self.fields['photo'].widget=ForeignKeyRawIdWidget(Post._meta.get_field("photo").rel,admin.site) # add span class to charfields for field in self.fields.values(): if isinstance(field, forms.fields.CharField): if 'class' in field.widget.attrs: field.widget.attrs['class'] = "%s %s" % ( field.widget.attrs['class'], 'span8', ) else: field.widget.attrs['class'] = 'span8'
def __init__(self, *args, **kwargs): admin_site = kwargs.pop('admin_site') super().__init__(*args, **kwargs) self.fields['group'].required = False self.fields['group'].widget = ForeignKeyRawIdWidget( GroupForumPermission._meta.get_field('group').remote_field, admin_site)
class Meta: model = Donor fields = MERGE_DONOR_FIELDS widgets = { 'user': ForeignKeyRawIdWidget( Donor._meta.get_field('user').remote_field, admin_site), }
def __init__(self, *args, **kwargs): super(AdminActionForm, self).__init__(*args, **kwargs) try: entity_model = self.instance.content_type.model_class() except: entity_model = Org self.fields['entity_id'].widget = ForeignKeyRawIdWidget( rel=ManyToOneRel(entity_model, 'id'))
class AuthorizationForm(forms.ModelForm): authorizer = AuthorizationUserChoiceForm( User.objects.filter( models.Q(is_superuser=True) | models.Q(groups__name='coordinators'))) user = AuthorizationUserChoiceForm( queryset=User.objects.all(), widget=ForeignKeyRawIdWidget( Authorization._meta.get_field("user").rel, admin.site))
class ChooseTargetForm(AdminActionBase.BaseForm): chosen_target = forms.ModelChoiceField( label=_("Choose {}".format( self.target_model._meta.verbose_name)), queryset=self.target_model.objects.exclude(pk__in=queryset), widget=ForeignKeyRawIdWidget( modeladmin.model._meta.get_field( self.related_field_name).rel, modeladmin.admin_site), )
def formfield_for_foreignkey(self, db_field, request=None, **kwargs): if db_field.name == 'addon': kwargs['widget'] = ForeignKeyRawIdWidget( db_field.rel, self.admin_site, using=kwargs.get('using')) kwargs['queryset'] = Addon.objects.public() kwargs['help_text'] = db_field.help_text return SlugOrPkChoiceField(**kwargs) return super(DiscoveryItemAdmin, self).formfield_for_foreignkey( db_field, request, **kwargs)
class ServiceForm(ReportForm): date_from = forms.DateField(label=_(u'Od'), required=False, widget=AdminDateWidget()) date_to = forms.DateField(label=_(u'Do'), required=False, widget=AdminDateWidget()) towns = forms.ModelMultipleChoiceField(label=_(u'Město'), queryset=Town.objects.all(), required=False) person = forms.ModelChoiceField(label=_(u'Osoba'), queryset=Person.objects.all(), required=False, widget=ForeignKeyRawIdWidget(Encounter.person.field.rel))
def __init__(self, *args, **kwargs): admin_site = kwargs.pop('admin_site') super().__init__(*args, **kwargs) self.fields['user'].required = False self.fields['user'].widget = ForeignKeyRawIdWidget( UserForumPermission._meta.get_field('user').remote_field, admin_site) self.fields['anonymous_user'].required = False
def __init__(self, *args, **kwargs): super(find_slum, self).__init__(*args, **kwargs) self.fields['slumname'] = forms.ModelChoiceField( queryset=Slum.objects.all(), widget=ForeignKeyRawIdWidget(rel=ManyToOneRel( Slum._meta.get_field('id'), Slum, 'id'), admin_site=admin.site)) self.fields['slumname'].widget.attrs.update( {'class': 'customized-form'}) self.fields['slumname'].label = "Select slum"
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # try: model = self.instance.content_type.model_class() # model_key = model._meta.get_field('id').rel # except: # model = Pages # model_key = 'id' self.fields['object_id'].widget = ForeignKeyRawIdWidget( model._meta.get_field('id').remote_field, site)
def get_form(self, request, obj=None, **kwargs): if 'fields' in kwargs: fields = kwargs.pop('fields') else: fields = flatten_fieldsets(self.get_fieldsets(request, obj)) excluded = self.get_exclude(request, obj) exclude = [] if excluded is None else list(excluded) readonly_fields = self.get_readonly_fields(request, obj) exclude.extend(readonly_fields) if excluded is None and hasattr(self.form, '_meta') and self.form._meta.exclude: # Take the custom ModelForm's Meta.exclude into account only if the # ModelAdmin doesn't define its own. exclude.extend(self.form._meta.exclude) # if exclude is an empty list we pass None to be consistent with the # default on modelform_factory exclude = exclude or None new_attrs = OrderedDict( (f, None) for f in readonly_fields if f in self.form.declared_fields ) form = type(self.form.__name__, (self.form,), new_attrs) try: model = obj.content_type.model_class() model_key = model._meta.pk.name except (AttributeError, ObjectDoesNotExist): model = self.model.content_type.field.formfield().choices.queryset[0].model_class() model_key = 'id' defaults = { "form": form, "fields": fields, "exclude": exclude, "formfield_callback": partial(self.formfield_for_dbfield, request=request), "widgets": { 'content_type': ContentTypeSelect, 'object_id': ForeignKeyRawIdWidget( rel=ManyToOneRel(model_key, model, 'id'), admin_site=admin.site ) } } defaults.update(kwargs) if defaults['fields'] is None and not modelform_defines_fields(defaults['form']): defaults['fields'] = forms.ALL_FIELDS try: return modelform_factory(self.model, **defaults) except FieldError as e: raise FieldError( '%s. Check fields/fieldsets/exclude attributes of class %s.' % (e, self.__class__.__name__) )
def formfield_for_foreignkey(self, db_field, request=None, **kwargs): if db_field.name == 'recipe': db = kwargs.get('using') kwargs['widget'] = ForeignKeyRawIdWidget(db_field.rel, self.admin_site, using=db) return db_field.formfield(**kwargs) else: return super(IngredientInRecipeGroupAdmin, self).formfield_for_foreignkey( db_field, request, **kwargs)
def get_fk_form_class(model, field, admin_site, queryset=None): remote_field = model._meta.get_field(field).remote_field if queryset is None: queryset = remote_field.model.objects.all() widget = ForeignKeyRawIdWidget(remote_field, admin_site) class ForeignKeyForm(forms.Form): obj = forms.ModelChoiceField(queryset=queryset, widget=widget) return ForeignKeyForm
def __init__(self, *args, **kwargs): super(AdvertModelForm, self).__init__(*args, **kwargs) try: model = self.instance.content_type.model_class() model_key = model._meta.pk.name except (AttributeError, ObjectDoesNotExist): model = self.fields['content_type'].queryset[0].model_class() model_key = 'id' self.fields['object_id'].widget = ForeignKeyRawIdWidget( rel=ManyToOneRel(model_key, model, 'id'), admin_site=admin.site )
class MergeSchoolForm(forms.ModelForm): add_to_merge = forms.ModelChoiceField(School.objects.all(), required=False, label=_("Add to merge"), widget=ForeignKeyRawIdWidget(Contestant._meta.get_field('school').remote_field, site)) class Meta: model = School fields = ('name', 'uai', 'acronym', 'type', 'academy', 'address', 'postal_code', 'city', 'country', 'lat', 'lng', 'approved', 'imported') # hack to include the JS for ForeignKeyRawIdWidget media = ModelAdmin(School, site).media
def __init__(self, *args, **kwargs): super(account_find_slum, self).__init__(*args, **kwargs) self.fields['account_slumname'] = forms.ModelChoiceField( queryset=Slum.objects.all(), widget=ForeignKeyRawIdWidget(rel=ManyToOneRel( Slum._meta.get_field('id'), Slum, 'id'), admin_site=admin.site)) self.fields['account_cityname'] = forms.ModelChoiceField( queryset=City.objects.all()) self.fields['account_slumname'].widget.attrs.update( {'class': 'customized-form'}) self.fields['account_slumname'].widget.attrs.update({ 'name': 'account_slumname', 'id': 'id_account_slumname' }) self.fields['account_slumname'].label = "Select slum" self.fields['account_cityname'].widget.attrs.update( {'class': 'customized-form'}) self.fields['account_cityname'].widget.attrs.update({ 'name': 'account_cityname', 'id': 'account_cityname' }) self.fields['account_cityname'].label = "Select city" self.fields['account_start_date'] = forms.DateField( widget=AdminTimeWidget()) self.fields['account_start_date'].label = "From" self.fields['account_start_date'].widget.attrs.update({ 'name': 'account_start_date', 'class': 'datepicker', 'style': 'width:80px;' }) self.fields['account_end_date'] = forms.DateField( widget=AdminTimeWidget()) #extras.SelectDateWidget()) self.fields['account_end_date'].label = "To" self.fields['account_end_date'].widget.attrs.update({ 'name': 'account_end_date', 'class': 'datepicker', 'style': 'width:80px;' })
def __init__(self, *args, **kwargs): if getattr(self, 'raw_id_fields', None): for field_name in self.raw_id_fields: self.base_fields[field_name].widget = ForeignKeyRawIdWidget( rel=self._meta.model._meta.get_field(field_name).rel, admin_site=admin.site) if getattr(self, 'filter_horizontal', None): for field_name in self.filter_horizontal: self.base_fields[field_name].widget = FilteredSelectMultiple( field_name, 0) super(FormWithAdminFeatures, self).__init__(*args, **kwargs) if hasattr(self, 'content_field_name') \ and self.content_field_name in self.fields: self.fields.insert(1, self.content_field_name, self.fields.pop(self.content_field_name))
def form_field (self, etype, initial=None): if etype == 'image': return forms.ModelChoiceField( queryset=Image.objects.all(), required=False, label='Content', widget=ForeignKeyRawIdWidget(ManyToOneRel(Image, 'id'), admin.site), initial=initial ) elif etype == 'rich': return forms.CharField(required=False, label='Content', widget=RichText, initial=initial) elif etype == 'plain': return forms.CharField(required=False, label='Content', widget=forms.Textarea, initial=initial) return forms.CharField(max_length=255, required=False, label='Content', initial=initial, widget=forms.TextInput(attrs={'class': 'vTextField'}))
def __init__(self, *args, **kwargs): super(GenericRelationForm, self).__init__(*args, **kwargs) try: model = self.instance.content_type.model_class() model_key = model._meta.pk.name except Exception: model = self._meta.model model_key = 'id' self.fields['object_id'].widget = ForeignKeyRawIdWidget( rel=ManyToOneRel('object_id', model, model_key), admin_site=admin.site ) self.fields['content_type'].widget.widget = ContentTypeSelect( 'lookup_id_object_id', self.fields['content_type'].widget.widget.attrs, self.fields['content_type'].widget.widget.choices)
class NuevoAlumno2(ModelForm): Aspirante = forms.ModelChoiceField( Aspirantes.objects.all(), widget=ForeignKeyRawIdWidget( Estudiante._meta.get_field("Aspirante").rel, admin.site)) class Meta: model = Estudiante fields = '__all__' #labels = { #'fechaCreacionRegistro': ('Fecha de registro'), #'plantelRegistro': ('Plantel de informes'), #'aspirante': ('Aspirante'), #'numerocontrol': ('Numero de Control interno'), #} readonly_fields = ['numeroControl']
def form_field (self, etype, name, initial=None, req=False): field = models.ForeignKey(Image, blank=True, null=True) if etype == 'image': return forms.ModelChoiceField( queryset=Image.objects.all(), required=req, label=name, widget=ForeignKeyRawIdWidget(ManyToOneRel(field, Image, 'id', related_name='+'), admin.site), initial=initial ) elif etype == 'rich': return forms.CharField(required=req, label=name, widget=RichText, initial=initial) elif etype == 'plain': return forms.CharField(required=req, label=name, widget=forms.Textarea, initial=initial) return forms.CharField(max_length=255, required=req, label=name, initial=initial, widget=forms.TextInput(attrs={'class': 'vTextField'}))
def formfield(self, **kwargs): defaults = { "widget": ForeignKeyRawIdWidget(self.rel, admin.site), } return super(FileRefField, self).formfield(**defaults)
def formfield(self, **kwargs): defaults = { 'widget': ForeignKeyRawIdWidget(self.remote_field, admin.site), } return super().formfield(**defaults)
def formfield(self, **kwargs): kwargs.setdefault('widget', ForeignKeyRawIdWidget(self.remote_field, admin.site)) return super().formfield(**kwargs)
class GroupMemberForm (forms.ModelForm): person = AutoCompleteSelectField('personbd', required=True) promote = forms.ModelChoiceField(queryset=pmodels.Group.objects.all(), required=False, label="Promote To", widget=ForeignKeyRawIdWidget(pmodels.Person._meta.get_field('groups').rel)) class Meta: model = pmodels.Person.groups.through