【发布时间】: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 它只会向我显示用户创建的数据。我用谷歌搜索了一堆,我真的找不到明确的答案。
【问题讨论】: