首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在django中打开一个特定投诉的编辑投诉页面

如何在django中打开一个特定投诉的编辑投诉页面
EN

Stack Overflow用户
提问于 2021-07-19 19:57:21
回答 1查看 49关注 0票数 0

我有一个查看投诉页面,在那里用户可以查看他/她已经提交的投诉。当用户点击其中一张卡,我需要一个新的页面打开,在那里用户可以查看该投诉的详细信息,并编辑它。

它应该从这里开始:

到这里:他们可以在这里查看详细信息并进行更改:

这是我的models.py:

代码语言:javascript
复制
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

views.py:

代码语言:javascript
复制
def EditComplaints(request):
   complaint = request.user.complaint
   form = ComplaintForm(instance=complaint)
   if request.method == 'POST':
       form = ComplaintForm(request.POST, request.FILES, instance=complaint)
       if form.is_valid():
           form.save()
   context = {'form': form}
   return render(request, 'newcomplaint.html', context)

模板(查看历史页面):

代码语言:javascript
复制
<div class="col right-pro-con">
        <div class="img-cir">
            <form method='POST' action="" enctype="multipart/form-data">
                {% csrf_token %} {% if request.user.profile.profile_pic.url %}
                <img src={{request.user.profile.profile_pic.url}} alt="" width="100px" height="100px" class="pro-img"> {% else %}
                <img src="{% static 'profileimages/msi.jpg' %}" alt="" width="100px" height="100px" class="pro-img"> {% endif %}
                <p class="my-name">{{request.user.profile.first}}
                    <p>
                        <p class="my-email-id">{{request.user.profile.email}}</p>
            </form>
        </div>
        <a href="#" class="con-us">CONTACT US</a>
    </div>

模板(编辑投诉页面):

代码语言:javascript
复制
<div class="col-lg middle middle-complaint-con">
        <i class="fas fa-folder-open fa-4x comp-folder-icon"></i>
        <h1 class="all-comp">New Complaint</h1>

        <form class="" action="" method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <p class="sub-typ-wr">Submit Type</p>
            <a href="/Login/Add-Complaint/Document-Style/"><button type="button" class="btn btn-secondary document-btn">Document</button></a>

            <div class="rep-num">
                <label class="written-label" for="">Report Number</label>
                <div class="written-txt-field">{{form.reportnumber}}</div>
            </div>

            <div class="eve-dte">
                <label class="written-label" for="">Event Date</label>
                <div class="written-txt-field">{{form.eventdate}}</div>
            </div>

            <div class="eve-typ">
                <label class="written-label" for="">Event Type</label>
                <div class="written-txt-field">{{form.event_type}}</div>
            </div>

            <div class="dev-pro">
                <label class="written-label" for="">Device Problem</label>
                <div class="written-txt-field">{{form.device_problem}}</div>
            </div>

            <label class="written-label eve-txt" for="">Event Text</label>

            <div class="Manufacturer">
                <label class="written-label" for="">Manufacturer</label>
                <div class="written-txt-field">{{form.manufacturer}}</div>
            </div>

            <div class="pro-code">
                <label class="written-label" for="">Product Code</label>
                <div class="written-txt-field">{{form.product_code}}</div>
            </div>

            <div class="brand-name">
                <label class="written-label" for="">Brand Name</label>
                <div class="written-txt-field">{{form.brand_name}}</div>
            </div>

            <div class="exem">
                <label class="written-label" for="">Exemption</label>
                <div class="written-txt-field">{{form.exemption}}</div>
            </div>

            <div class="pat-pro">
                <label class="written-label" for="">Patient Problem</label>
                <div class="written-txt-field">{{form.patient_problem}}</div>
            </div>



            <div class="comp-textarea">{{form.event_text}}</div>
            <button type="button" class="btn btn-secondary attach-btn-1"><div class="fas fa-file-upload">{{form.document}}</div></button>
            <button type="submit" name="submit" class="btn btn-secondary save-btn-1"><i class="fas fa-save"></i> Save</button>
        </form>

    </div>

url:

代码语言:javascript
复制
urlpatterns = [
   path('admin/', admin.site.urls),
   path('Home/', landing_page.views1.landing, name= 'Home'),
   path('Registration/', accounts.views.RegisterPage),
   path('Login/', accounts.views.LoginPage, name='Login'),
   path('Login/Profile/', accounts.views.profile, name='Profile'),
   path('Logout/', accounts.views.LogoutUser, name='Logout'),
   path('Login/Add-Complaint/', accounts.views.NewComplaint, name = 'New'),
   path('Login/Add-Complaint/Document-Style/', accounts.views.DocComplaint, name='doc'),
   path('My-History/', accounts.views.History, name='MyHistory'),
   path('Complaint/', accounts.views.EditComplaints, name='Complaint')
 ]

我该怎么做呢?我应该在代码中添加什么,以便代码打开特定的投诉详细信息并编辑该投诉页面?

EN

回答 1

Stack Overflow用户

发布于 2021-07-19 20:35:48

好的,所以你已经有了一个视图。您需要的是某种类型的唯一标识符,以帮助您确定用户想要编辑的实际对象。

因此,在您的urls.py中,您必须添加一个类似如下的模式:

代码语言:javascript
复制
urlpatterns = [
    ...
    path('complain/<int:pk>/edit/', views.EditComplaint.as_view(), name='edit-complain'),
    ...
]

在您的views.py中,以类似于以下方式处理它:

代码语言:javascript
复制
from django.views.generics import UpdateView
from django.contrib.auth.mixins import UserPassesTestMixin
from django.http import Http404
from django.utils.translation import gettext_lazy as _

from .models import Complaint

class EditComplaint(UserPassesTestMixin, UpdateView):
    model = Complaint
    fields = ('info', )  # define whatever field that you want to render

    def form_valid(self, form):
        # do your form validation here

    def test_func(self):
        """ensuring the reporter themselves is updating the complain"""
        complain = self.get_object()

        if self.request.user == complain.user:
            return True
        raise Http404(_('This complain does not exist'))
  
    def success_url(self):
        # this is only required if your model doesn't have a `get_absolute_url` method
        # return the actual url of the instance

现在需要做的就是在EditComplaint视图的模板中添加一个链接(假设您的list模板中已经有了捐赠列表)。

一些基本的东西应该可以完成这项工作

代码语言:javascript
复制
{% for complaint in complaints %}
    <a href="{% url 'edit-complaint' complaint.pk %}">Edit Complaint</a>
{% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68440105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档