Adding custom fields in model in django admin

In forms.py:


from django.forms import ModelForm
from .models import YourModel


class YourModelForm(forms.ModelForm):

    extra_field = forms.CharField()

    def save(self, commit=True):
        extra_field = self.cleaned_data.get('extra_field', None)
        # ...do something with extra_field here...
        return super(YourModelForm, self).save(commit=commit)

    class Meta:
        fields = '__all__'
        model = YourModel

In admin.py:


from .models import YourModel
from .forms import YourModelForm


class YourModelAdmin(admin.ModelAdmin):
    form = YourModelForm

admin.site.register(YourModel, YourModelAdmin)

Add foreign key choices field with plus button

from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe
from django.forms import widgets
from django.conf import settings
from django.utils.translation import gettext as _

class RelatedFieldWidgetCanAdd(widgets.Select):

    def __init__(self, related_model, related_url=None, *args, **kw):

        super(RelatedFieldWidgetCanAdd, self).__init__(*args, **kw)

        if not related_url:
            rel_to = related_model
            info = (rel_to._meta.app_label, rel_to._meta.object_name.lower())
            related_url = 'admin:%s_%s_add' % info

        # Be careful that here "reverse" is not allowed
        self.related_url = related_url

    def render(self, name, value, *args, **kwargs):
        self.related_url = reverse(self.related_url)
        output = [super(RelatedFieldWidgetCanAdd, self).render(name, value, *args, **kwargs)]
        #output.append(u'<a href="%s?_to_field=id&amp;_popup=1" class="add-another" id="add_id_%s" > ' % \
        output.append(u'<a href="%s?_to_field=id&amp;_popup=1" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
            (self.related_url, name))
        output.append(u'<img src="%sadmin/img/icon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (settings.STATIC_URL, _('Add Another')))
        return mark_safe(u''.join(output))


class YourModelForm(forms.ModelForm):

    field_name = forms.ModelChoiceField(
        required=True,
        queryset=ModelName.objects.all(),
        widget=RelatedFieldWidgetCanAdd(ModelName)
    )

    class Meta:
        fields = '__all__'
        model = YourModel

results matching ""

    No results matching ""