I've got a Model in Django, example code below (not my actual code):
class Department(models.Model):
name = models.CharField(max_length=100)
abbreviation = models.CharField(max_length=4)
Let's say I do the following in the Django shell:
>>> Department(name='Computer Science',abbreviation='C S ').save()
>>> Department(name='Mathematics',abbreviation='MATH').save()
>>> Department(name='Anthropology',abbreviation='ANTH').save()
I now have those four departments stored in my database. Say we have another class, Course
, which belongs to a Department
:
class Course(models.Model):
department = models.ForeignKey('Department')
number = models.IntegerField()
class CourseForm(ModelForm):
class Meta:
model = Course
If I render the ModelForm
object directly in a template by just referncing a variable, say form
, which got passed down, the Departments appear in a drop-down box (an HTML select box). So far so good.
The problem is: the items in the select box are sorted by ID. So they appear as:
- Computer Science
- Mathematics
- Anthropology
But, I want them sorted alphabetically, i.e.
- Anthropology
- Computer Science
- Mathematics
How can I change the way these items are sorted in the ModelForm
code, or in the Model
code, rather than in the template?
And in general, how can I customize the way a particular field or widget works when generated by a ModelForm
?