【问题标题】:attribute error in django. django.db.models has no attributedjango 中的属性错误。 django.db.models 没有属性
【发布时间】:2021-07-21 16:56:48
【问题描述】:

我正在尝试编写代码,以便系统中的用户可以在此页面上查看其他人注册的投诉,但不能查看他们自己的投诉。这是代码,但我不明白出了什么问题:

views.py:

class OtherPeoplesComplaints(TemplateView):
   model = Complaint
   form_class = ComplaintForm
   template_name = 'userComplaints.html'
   def get_context_data(self, *args, **kwargs):
       context = super().get_context_data(*args, **kwargs)
       context["complaints"] = models.Complaint.objects.exclude(
           profile__user = self.request.user
       )

models.py:

class Complaint(models.Model):
   user = models.ForeignKey(User, on_delete= models.CASCADE, null = True, blank=True)
   id = models.AutoField(blank=False, primary_key=True)
   reportnumber = models.CharField(max_length=500 ,null = True, blank= False)
   eventdate = models.DateField(null=True, blank=False)
   event_type = models.CharField(max_length=300, null=True, blank=True)
   device_problem = models.CharField(max_length=300, null=True, blank=True)
   manufacturer = models.CharField(max_length=300, null=True, blank=True)
   product_code = models.CharField(max_length=300, null=True, blank=True)
   brand_name = models.CharField(max_length = 300, null=True, blank=True)
   exemption = models.CharField(max_length=300, null=True, blank=True)
   patient_problem = models.CharField(max_length=500, null=True, blank=True)
   event_text = models.TextField(null=True, blank= True)
   document = models.FileField(upload_to='static/documents', blank=True, null=True)

   def __str__(self):
       return self.reportnumber

forms.py:

class DateInput(forms.DateInput):
   input_type = 'date'

class ComplaintForm(ModelForm):
   class Meta:
       model = Complaint
       fields = '__all__'
       widgets = {
           'reportnumber': forms.TextInput(attrs={'placeholder': 'Report number'}),
           'event_type': forms.TextInput(attrs={'placeholder': 'Event type'}),
           'eventdate': DateInput(),
           'device_problem': forms.TextInput(attrs={'placeholder': 'Device Problem'}),
           'event_text': forms.Textarea(attrs={'style': 'height: 130px;width:760px'}),
           'manufacturer': forms.TextInput(attrs={'placeholder': 'Enter Manufacturer Name'}),
           'product_code': forms.TextInput(attrs={'placeholder': 'Enter Product Code'}),
           'brand_name': forms.TextInput(attrs={'placeholder': 'Enter Brand Name'}),
           'exemption': forms.TextInput(attrs={'placeholder': 'Enter Exemption'}),
           'patient_problem': forms.TextInput(attrs={'placeholder': 'Enter Patient Problem'}),
       }
    
   def clean(self):
       cleaned_data = super(ComplaintForm, self).clean()
       reportnumber = cleaned_data.get('reportnumber')
       event_text = cleaned_data.get('event_text')
       if not reportnumber and not event_text:
           raise forms.ValidationError('You have to write something!')
       return cleaned_data

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    在这个视图中

    class OtherPeoplesComplaints(TemplateView):
       model = Complaint
       form_class = ComplaintForm
       template_name = 'userComplaints.html'
       def get_context_data(self, *args, **kwargs):
           context = super().get_context_data(*args, **kwargs)
           context["complaints"] = models.Complaint.objects.exclude(
               profile__user = self.request.user
           )
    

    您正在使用此查询:

    context["complaints"] = models.Complaint.objects.exclude(profile__user = self.request.user)
    

    改成:

    context["complaints"] = self.model.objects.exclude(user = self.request.user)
    

    解释:

    您的模型是Complaint,您可以使用self.model 访问它,因为您在此处定义了类变量:

    class OtherPeoplesComplaints(TemplateView):
       model = Complaint
    

    您想要访问除您自己之外的其他用户的投诉,因此在您的查询中进行此更新:

    exclude(user = self.request.user)
    

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2017-01-22
      • 2019-07-20
      相关资源
      最近更新 更多