Using a TranslatableModel in a form ModelChoiceField

174 views Asked by At

I've got a model which represents statuses for various languages so I'm using the django-hvad TranslatableModel base class.

When used in a form the event_status field choices from the TranslatableModel are 1, 2 etc so Status.__unicode__ must be returning the pk opposed to the description attribute as intended.

forms.py

class StatusForm(forms.ModelForm):
    """
    Form for approving an event.
    """
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        self.base_fields['user'].queryset = User.objects.filter(pk=user.id)
        super(StatusForm, self).__init__(*args, **kwargs)

    user = forms.CharField(
        widget=forms.HiddenInput()
    )
    timestamp = forms.DateField(
        input_formats=DATE_INPUT_FORMATS
    )

    class Meta:
        model = StatusHistory
        fields = [
            'event_status', 'timestamp', 'user'
        ]

models.py

class Status(TranslatableModel):
    """
    Status to be applied to an event.
    """
    translations = TranslatedFields(
        description=models.CharField(
            verbose_name=_("Status description"),
            default=_("Submitted"),
            max_length=255
        )
    )

    class Meta:
        app_label = 'events'
        verbose_name = _("Status")
        verbose_name_plural = _("Status")

    def __unicode__(self):
        return self.safe_translation_getter('description', str(self.pk))


class StatusHistory(models.Model):
    """
    The historical log of event statuses.
    """
    event = models.ForeignKey(
        'events.Event',
        related_name='StatusHistory'
    )
    event_status = models.ForeignKey(Status)
    timestamp = models.DateTimeField(
        verbose_name=_("Time of status change"),
        auto_now=True
    )
    user = models.ForeignKey(User)

    class Meta:
        app_label = 'events'
        verbose_name = _("Status history")
        verbose_name_plural = _("Status history")

    def __unicode__(self):
        return u"{event}: {status}".format(
            event=self.event, status=self.event_status
        )

Have I implemented the TranslatableModel incorrectly? I had one time while running this through Pycharm's debug server where 1 of the Status objects gave me the description, but the other only returned an id again so I assume I'm correct in this approach.

0

There are 0 answers