#python #django #django-forms
#python #django #django-forms
Вопрос:
У меня есть выпадающее поле под названием Label как часть модели под названием Birthday. Моя проблема в том, что в выпадающем поле отображаются метки всех пользователей. Как я могу убедиться, что в нем отображаются только метки, характерные для данного пользователя?
Я предполагаю, что в модели формы требуется запрос, но я понятия не имею, как это сделать.
формы
class BirthdayForm(forms.ModelForm):
class Meta:
model = Birthday
fields = ('name', 'day', 'label')
class LabelForm(forms.ModelForm):
class Meta:
model = Label
fields = ('tag',)
Модели
class Label(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
tag = models.CharField(max_length=25)
def __str__(self):
return self.tag
class Birthday(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=25, default="")
day = models.DateField()
label = models.ForeignKey(Label, on_delete=models.SET_NULL, default=0, null=True, blank=True)
def __str__(self):
return self.name
Вид
@login_required
def index(request):
if request.method == "POST":
form = BirthdayForm(request.POST)
if form.is_valid():
birthday = form.save(commit=False)
birthday.user = request.user
birthday.save()
return redirect('index')
else:
form = BirthdayForm()
birthday = Birthday.objects.filter(user=request.user)
username = request.user
return render(request, 'bd_calendar/index.html', {'form': form, 'birthday': birthday, 'username': username })
шаблон
<form method="POST">{% csrf_token %}
<table border="0">
{{ form }}
</table>
<button class="submitButton" type="submit">Submit</button>
</form>
Ответ №1:
попробуйте это
class BirthdayForm(forms.ModelForm):
class Meta:
model = Birthday
fields = ('name', 'day', 'label')
def __init__(self, user, *args, **kwargs):
super(BirthdayForm, self).__init__(*args, **kwargs)
self.fields['label'].queryset = Label.objects.filter(user=user)
надеюсь, это поможет
Комментарии:
1. Я получаю эту ошибку: ошибка типа в / __init__() отсутствует 1 требуемый позиционный аргумент: ‘user’