How to set title and class in the HTML for the options of a ModelChoiceField?

Posted by celopes on Stack Overflow See other posts from Stack Overflow or by celopes
Published on 2010-06-07T21:24:50Z Indexed on 2010/06/07 23:42 UTC
Read the original article Hit count: 160

Filed under:
|

I have a model

class MyModel(models.Model):
    name = models.CharField(max_length=80, unique=True)
    parent = models.ForeignKey('self', null=True, blank=True)

I want to render a ModelChoiceField for that model that looks like:

<select name="mymodel" id="id_mymodel">
    <option value="1" title="Value 1" class="">Value 1</option>
    <option value="2" title="Value 2" class="Value 1">Value 2</option>
</select>

The differences between this output and the default output for a ModelChoiceField are the title and class elements in the OPTION tag. They don't exist in ModelChoiceField's default output.

For my purposes:

  • The title element is supposed to be the Option Name.
  • The class element is supposed to be self.parent.name. (this is my problem)

So, in the HTML snippet above, Value 1 has no parent and Value 2 has a parent of Value 1.

What is the best mechanism to change ModelChoiceField's default HTML output?


EDIT: I understand how to create a new Widget for rendering HTML. The problem is how to render a value from the underlying model in each of the options.

© Stack Overflow or respective owner

Related posts about django

Related posts about django-forms