Django - 如何根据日期时间字段限制下拉菜单中的外键选择
Django - How to restrict foreign key choices in dropdown menu depending on datatime field
我有用于在数据库中添加数据的表单,我想限制下拉菜单中的外键选择。它必须限制在我的 finishDate 字段中。如果 finishDate 是今天之前的日期(例如,今天是 21-08-2016,finishDate 是 30-06-2013),那么我不想显示该 finishDate 的外键值。最简单的方法是什么?我在这方面比较陌生,所以我需要帮助。
models.py
class Account(models.Model):
startDate = models.DateField(verbose_name="Start")
finishDate = models.DateField(verbose_name="Finish")
def __str__(self):
return 'A{}'.format(self.id)
class Net(models.Model):
date = models.DateTimeField(default=datetime.now())
MB = models.IntegerField(validators=[MinValueValidator(1)],default=randint(100,2000))
idAccount = models.ForeignKey(Account, on_delete=models.CASCADE, verbose_name="Account")
def __str__(self):
return 'Record {}'.format(self.datum)
forms.py
class NetForm(ModelForm):
class Meta:
model = Net
fields = ['idAccount']
views.py
@login_required(login_url="/accounts/login/")
def net(request):
if request.method == 'POST':
form = NetForm(request.POST)
if form.is_valid():
internet = form.save()
return HttpResponseRedirect('/')
else:
form = NetForm()
return render(request, 'project/Net.html', {'form': form})
非常感谢!
您可以在 __init__
中对其进行过滤
import datetime
def NetForm(forms.ModelForm):
#...fields
def __init__(self, *args, **kwargs):
super(NetForm, self).__init__(*args, **kwargs)
# Now set the queryset...
self.fields['idAccount'].queryset = Account.objects.filter(finishDate__gte=datetime.datetime.now())
我有用于在数据库中添加数据的表单,我想限制下拉菜单中的外键选择。它必须限制在我的 finishDate 字段中。如果 finishDate 是今天之前的日期(例如,今天是 21-08-2016,finishDate 是 30-06-2013),那么我不想显示该 finishDate 的外键值。最简单的方法是什么?我在这方面比较陌生,所以我需要帮助。
models.py
class Account(models.Model):
startDate = models.DateField(verbose_name="Start")
finishDate = models.DateField(verbose_name="Finish")
def __str__(self):
return 'A{}'.format(self.id)
class Net(models.Model):
date = models.DateTimeField(default=datetime.now())
MB = models.IntegerField(validators=[MinValueValidator(1)],default=randint(100,2000))
idAccount = models.ForeignKey(Account, on_delete=models.CASCADE, verbose_name="Account")
def __str__(self):
return 'Record {}'.format(self.datum)
forms.py
class NetForm(ModelForm):
class Meta:
model = Net
fields = ['idAccount']
views.py
@login_required(login_url="/accounts/login/")
def net(request):
if request.method == 'POST':
form = NetForm(request.POST)
if form.is_valid():
internet = form.save()
return HttpResponseRedirect('/')
else:
form = NetForm()
return render(request, 'project/Net.html', {'form': form})
非常感谢!
您可以在 __init__
import datetime
def NetForm(forms.ModelForm):
#...fields
def __init__(self, *args, **kwargs):
super(NetForm, self).__init__(*args, **kwargs)
# Now set the queryset...
self.fields['idAccount'].queryset = Account.objects.filter(finishDate__gte=datetime.datetime.now())