django model forms filter queryset
django, django-forms, django-models
Solution
Override `__init__` to remove current user from the `to_user` choices.
Update: More Explanation
ForeignKey uses `ModelChoiceField` whose choices are queryset. So in `__init__` you have to remove the current user from `to_user`'s queryset.
Update 2: Example
class RatingForm(ModelForm):
def __init__(self, current_user, *args, **kwargs):
super(RatingForm, self).__init__(*args, **kwargs)
self.fields['to_user'].queryset = self.fields['to_user'].queryset.exclude(id=current_user.id)
class Meta:
model = Rating
exclude = ('from_user', 'dtobject')
Now in the view where you create `RatingForm` object pass `request.user` as keyword argument `current_user` like this.
form = RatingForm(current_user=request.user)
Problem
I have the following model: ``` class Article(models.Model): title = models.CharField() description = models.TextField() author = models.ForeignKey(User) class Rating(models.Model): value = models.IntegerField(choices=RATING_CHOICES) additional_note = models.TextField(null=True, blank=True) from_user = models.ForeignKey(User, related_name='from_user') to_user = models.ForeignKey(User, related_name='to_user') rated_article = models.ForeignKey(Article, null=True, blank=True) dtobject = models.DateTimeField(auto_now_add=True) ``` Based upon the above model, i have created a model form, as follows: Model Forms: ``` class RatingForm(ModelForm): class Meta: model = Rating exclude = ('from_user', 'dtobject') ``` Excluding `from_user` because the `request.user` is the `from_user`. The form renders well, but in `to_user` in the dropdown field, the author can rate himself as well. So i would want the current_user's name to populate in the dropdown field. How do i do it?