【问题标题】:Creating dropdown menu in django for user created data only in a different class仅在不同的类中为用户创建的数据在 django 中创建下拉菜单
【发布时间】:2021-06-22 21:01:31
【问题描述】:

我是编程新手,我的第一语言/堆栈是 Python 和 Django。我已经弄清楚如何在我的脚本表单中创建一个指向不同类“患者”的下拉菜单,但我不知道如何只向我显示当前用户创建的数据。我是否应该在我的models.py、forms.py 或views.py 中设置它?这是我认为应该起作用的东西,但事实并非如此。 (尝试在views.py中设置)

Models.py

class Patient(models.Model):
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE,)
    patient_name = models.CharField(max_length=40, unique=True)

    def __str__(self):
        return self.patient_name

class Script(models.Model):
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE,)
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE, verbose_name='Primary Patient')

所以我的患者字段是我的下拉列表,它正在查看获取患者姓名字符串的患者类。我只想要该用户在下拉列表中创建的 Patient_name 条目。

Views.py

class ScriptCreateView(LoginRequiredMixin, CreateView):
    model = Script
    template_name = 'script_new.html'
    success_url = reverse_lazy('script_list')
    fields = (
                'patient',
                'drug_name', 
                'drug_instructions', 
                'drug_start_day', 
                'drug_start_time', 
                'drug_hours_inbetween', 
                'drug_num_days_take',
                
    )

#This sets user created fields only??
    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(
            author=self.request.user
        )
#This sets the author ID in the form
    def form_valid(self, form): 
        form.instance.author = self.request.user
        return super().form_valid(form
        )

Forms.py

class ScriptForm(forms.ModelForm):
    class Meta:
        model = Script
        fields = '__all__'

#This is requiring user login for any of these views??
    def __init__(self, user=None, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if user:
            self.fields['patient'].queryset = Patient.objects.filter(author=user)

我确定这是我在这里缺乏经验,但我认为通过在视图中设置函数 def get_queryset 它只会向我显示用户创建的数据。我用谷歌搜索了一堆,我真的找不到明确的答案。

【问题讨论】:

    标签: python django


    【解决方案1】:

    请在你的views.py文件中初始化这样的表单

    <form or form_class> = Form(request.POST, user=request.user)
    

    【讨论】:

    • 我将此添加到我的views.py 顶部from .forms import ScriptForm 我将此添加到ScriptCreateView form = ScriptForm(request.POST, user=request.user) 我现在收到此错误:\views.py",第97 行,在ScriptCreateView 表单中= ScriptForm(request.POST, user=request.user) NameError: name 'request' is not defined 我不确定如何定义'request'?
    • 也许您没有在视图中添加请求 arg。
    【解决方案2】:

    我必须在视图中添加最后一个 form.fields 查询,其中过滤了仅由“作者”创建的项目,这是我正在寻找的:

    def get_form(self):
        form = super().get_form()
        form.fields['drug_start_day'].widget = DatePickerInput()
        form.fields['drug_start_time'].widget = TimePickerInput()
        form.fields['patient'].queryset = Patient.objects.filter(author=self.request.user)
        return form
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2021-10-01
      • 1970-01-01
      • 2012-01-20
      • 2017-02-20
      相关资源
      最近更新 更多