Hi!

I will test you code, but for now, try rewrite the form class, this way:

class MeasurementForm(forms.ModelForm):
    width = forms.DecimalField(widget=MeasurementWidget())
    height = forms.DecimalField(widget=MeasurementWidget())
    length = forms.DecimalField(widget=MeasurementWidget())

    class Meta:
        model = Inventory

Cheers.


On Fri, Apr 11, 2014 at 11:25 AM, Mark Phillips
<[email protected]>wrote:

> I looked at the MultiWidget and tried to implement following a couple of
> examples, but I have run into a problem. I get this error when I try to
> open the admin form - type object 'MeasurementWidget' has no attribute
> 'attrs'
>
> widgets.py
> class MeasurementWidget(forms.MultiWidget):
>     def __init__(self, attrs=None):
>         widgets = (
>             forms.textInput(attrs=attrs),
>             forms.textInput(attrs=attrs),
>             forms.textInput(attrs=attrs),
>             )
>         super(MeasurementWidget, self).__init__(widgets, attrs)
>
>     def decompress(self, value):
>         if value:
>             frac = Fraction(value)
>             num = frac.numerator
>             denom = frac.denominator
>             whole = num/denom
>             if whole == 0:
>                 whole = ''
>             numerator = num - (num/denom)*denom
>             return [whole, numerator, denom]
>         return ['', '', '']
>
>     def format_output(self, rendered_widgets):
>         return u''.join(rendered_widgets)
>
>     def value_from_datadict(self, data, files, name):
>         valuelist = [widget.value_from_datadict(data, files, name + '_%s'
> % i) for i, widget in enumerate(self.widgets)]
>         try:
>             if valuelist[0] == '':
>                 valuelist[0] = 0
>             numerator = int(valuelist[0]) * int(valuelist[2]) +
> int(valuelist[1])
>             denominator = int(valuelist[2])
>             return Decimal(float(Fraction(numerator, denominator)))
>         except ValueError:
>             return ""
>
> models.py
> class Inventory(models.Model):
>     location = models.ForeignKey(Location)
>     room = models.ForeignKey(Room, blank=True, null=True)
>     condition = models.ForeignKey(Condition)
>     status = models.ForeignKey(Status)
>     category = models.ForeignKey(Category)
>     length = models.DecimalField(max_digits=5, decimal_places=3, default=0)
>     width = models.DecimalField(max_digits=5, decimal_places=3, default=0)
>     height = models.DecimalField(max_digits=5, decimal_places=3, default=0)
>     and other fields.....
>
> admin.py
> class MeasurementForm(forms.ModelForm):
>     def __init__(self, *args, **kwargs):
>         super(MeasurementForm, self).__init__(*args, **kwargs)
>         self.fields['width'].widget = MeasurementWidget
>         self.fields['height'].widget = MeasurementWidget
>         self.fields['length'].widget = MeasurementWidget
>
>     class Meta:
>         model = Inventory
>
> class InventoryAdmin(admin.ModelAdmin):
>     list_display = ('id','location', 'room', 'category', 'description',
> 'condition', 'length', 'width', 'height', 'status', 'sale_price',
> 'selling_costs', 'debt')
>     list_filter = ['category']
>     search_fields = ['description']
>     form = MeasurementForm
>     inlines = [NoteInline, ImageInline, EstimateInline]
>
> admin.site.register(Inventory, InventoryAdmin)
>
> I am really lost here. Does anyone have an easier way to override the
> widgets on the admin form?
>
> Thanks,
>
> Mark
>
>
> On Thu, Apr 10, 2014 at 7:09 PM, Lucas Klassmann <[email protected]
> > wrote:
>
>> Hi!
>>
>> I never used this, but i found here and can be useful:
>>
>>
>> https://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.MultiWidget
>>
>> Cheers.
>>
>>
>> On Thu, Apr 10, 2014 at 10:56 PM, Mark Phillips <
>> [email protected]> wrote:
>>
>>> I hope I am using the right terminology....
>>>
>>> I have a Decimal field in a model called 'width'. In the admin screen, I
>>> would like to display this field as three text boxes like this:
>>>
>>> width:  [] []/[]
>>>
>>> so I can enter 2 1/8 for the width, and then have the code convert that
>>> to 2.125 as a Decimal field and store that Decimal field in the database.
>>>
>>> How would I go about doing this?
>>>
>>> Thanks,
>>>
>>> Mark
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/django-users.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/django-users/CAEqej2MkiPYfjO4afqyWVr587AL5UczhuzJCLhgxeqjda8%2BcDw%40mail.gmail.com<https://groups.google.com/d/msgid/django-users/CAEqej2MkiPYfjO4afqyWVr587AL5UczhuzJCLhgxeqjda8%2BcDw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Lucas Klassmann
>> Desenvolvedor de Software
>>
>> Email: [email protected]
>> Web site: http://www.lucasklassmann.com
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/django-users.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-users/CAOz50pLMMRv8-boG1C0Rb7vriVnpO-G953Lbh0zoRhjG6-zsLQ%40mail.gmail.com<https://groups.google.com/d/msgid/django-users/CAOz50pLMMRv8-boG1C0Rb7vriVnpO-G953Lbh0zoRhjG6-zsLQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAEqej2Onin-ONGCxnC6WLpO9cL66UoENiyopp2aPns0A%3D2JkWw%40mail.gmail.com<https://groups.google.com/d/msgid/django-users/CAEqej2Onin-ONGCxnC6WLpO9cL66UoENiyopp2aPns0A%3D2JkWw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Lucas Klassmann
Desenvolvedor de Software

Email: [email protected]
Web site: http://www.lucasklassmann.com

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAOz50pK7Qu7YEB%3D3%2ByLRr%2Boh6nzST2o9bc0k3nt33%3DJ74-wmqA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to