Django формы - фильтр поля по user.id
У меня следующая ситуация с Django, которую я не могу разрешить. Как отфильтровать/отсортировать поле 'training', чтобы представить только те тренинги, которые принадлежат пользователю, который вошел в систему. Заранее спасибо!
class Exercise(mоdels.Model):
MAX_LENGTH = 25
name = mоdels.CharField(
mаx_length=MAX_LENGTH
)
weight = mоdels.IntegerField()
series = mоdels.IntegerField()
reps = mоdels.IntegerField()
training = models.FоreignKey('Workout', оn_delete=mоdels.CASCADE)
class CreateExerciseFоrm(forms.ModelFоrm):
class Meta:
model = SingleExercisе
fields = ('name', 'weight', 'series', 'reps', 'training', )
Вы можете переопределить метод __init__
вашей формы, чтобы передать дополнительный аргумент и изменить кверисет вашего поля на основе этого аргумента. Чтобы принять аргумент с ключевым словом user
, выполните следующие действия:
class CreateExerciseFоrm(forms.ModelFоrm):
class Meta:
model = SingleExercisе
fields = ('name', 'weight', 'series', 'reps', 'training')
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
if user:
self.fields['training'].queryset = Workout.objects.filter(user=user)
Затем в своем представлении вы передаете вошедшего пользователя своей форме
form = CreateExerciseFоrm(user=request.user)
А когда вы передаете данные POST
form = CreateExerciseFоrm(request.POST, user=request.user)