[英]Limit choices inside an input django
我目前正在尝试通过限制输入内的选择来改进我的表单(用户只能选择他们自己的标签)。
我试图在 get/post function 中这样做:
def post(self, request, *args, **kwargs):
form = DateInputForm(request.POST, limit_choices_to={'tags__user': request.user})
def get(self, request, *args, **kwargs):
form = DateInputForm(limit_choices_to={'tags__user': request.user})
(1) 我得到一个错误。
基础模型。 init () 得到了一个意外的关键字参数 'limit_choices_to'
我的表格:
class DateInputForm(ModelForm):
class Meta:
model = Task
# exclude = ('user',)
fields = ['user', 'title', 'description', 'date_to_do', 'complete', 'tags']
widgets = {
'date_to_do': forms.DateTimeInput(format='%Y-%m-%dT%H:%M',
attrs={'type': 'datetime-local', 'class': 'timepicker'}),
}
我的看法:
class TaskUpdate(LoginRequiredMixin, UpdateView):
model = Task
template_name = "tasks/task_form.html"
form_class = DateInputForm
标签 model:
class Tag(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
tag_name = models.CharField(max_length=200, null=True, blank=False, default='')
全局:目标是限制用户在我的任务表单中可以选择的标签(带有标签输入); 目前,一个用户可以选择另一个用户的标签,这不是我想要的。
我认为最简单的方法是覆盖表单的构造函数,如以下答案所示: https://stackoverflow.com/a/1969081/18728725
为了过滤输入中的标签,我返回并遵循 StefanoTrv 的连接方法。 这是我的解决方案:
def __init__(self, *args, **kwargs):
super(DateInputForm, self).__init__(*args, **kwargs)
if 'instance' in kwargs:
new_kwargs = kwargs.get('instance')
self.fields['tags'].queryset = Tag.objects.filter(user=new_kwargs.user.id)
警告,这在 createView 中不起作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.