【问题标题】:when i update/edit data is duplicated instead of being updated in django当我更新/编辑数据时,数据被复制而不是在 Django 中被更新
【发布时间】:2023-02-04 01:38:06
【问题描述】:

数据被复制而不是在 Django 中被更新,请帮助我克服这个问题我也尝试了更新方法但是我遇到的问题是图像不显示,因此我使用保存方法来保存和复制我不想要的 anthor 对象.它应该更新同一个对象。

视图.py

def EuAdmin(request, pk):
        pi = EmailDb.objects.get(id=pk)
        if request.method == 'POST':
            institution = request.POST.get('institution', '')
            fullname = request.POST.get('fullname', '')
            email = request.POST.get('email', '')
            contact = request.POST.get('contact', '')
            position = request.POST.get('position', '')
            uploadd = request.FILES.get('upload', '')
            sdata = EmailDb(institution=institution, fullname=fullname, contact=contact, email=email, position=position, uploaddata=uploadd)
            sdata.save()
            return HttpResponseRedirect("/eadmin")
        return render(request, 'NEC/eupdate.html', {'pi': pi})

模型.py

class EmailDb(models.Model):
    institution = models.CharField(max_length=300, blank=True, null=True)
    fullname = models.CharField(max_length=50, blank=True, null=True)
    contact = models.IntegerField()
    email = models.CharField(max_length=300, blank=True, null=True)
    position = models.CharField(max_length=100, blank=True, null=True)
    uploaddata = models.FileField(upload_to='appointment_letter')

    def __str__(self):
        return self.fullname

【问题讨论】:

    标签: python-3.x django django-models django-views django-forms


    【解决方案1】:

    那是因为你创造了一个新的EmailDb对象。您可以使用以下方式编辑:

    from django.shortcuts import get_object_or_404
    
    
    def EuAdmin(request, pk):
        pi = get_object_or_404(EmailDb, pk=pk)
        if request.method == 'POST':
            institution = request.POST.get('institution', '')
            fullname = request.POST.get('fullname', '')
            email = request.POST.get('email', '')
            contact = request.POST.get('contact', '')
            position = request.POST.get('position', '')
            uploaded = request.FILES.get('upload', '')
            pi.institution = institution
            pi.fullname = fullname
            pi.contact = contact
            pi.email = email
            pi.position = position
            pi.uploaddata = uploaded
            pi.save()
            return HttpResponseRedirect('/eadmin')
        return render(request, 'NEC/eupdate.html', {'pi': pi})

    笔记: 最好使用Form [Django-doc] 而不是执行手动验证和清理数据。 Form 不会 只简化渲染HTML 中的一个表单,但它也使它更方便 到证实输入,和干净的数据到更方便的类型。


    笔记: 模型通常没有Db 后缀。模型不是表,它作为表存储在关系数据库中,但即使这样它也有额外的逻辑,如验证器、管理器等。


    笔记: 请使用EmailField [Django-doc] 而不是CharField [Django-doc] 来存储电子邮件地址,这可以进行验证以检查输入的数据是否确实是电子邮件地址。


    笔记: 通常最好使用get_object_or_404(…) [Django-doc], 然后直接使用.get(…) [Django-doc]。如果对象不存在, 例如,因为用户自己更改了 URL,get_object_or_404(…) 将导致返回未找到 HTTP 404响应,而使用 .get(…) 将导致HTTP 500 服务器错误.

    【讨论】:

      【解决方案2】:
      sdata = EmailDb(institution=institution, fullname=fullname, contact=contact, email=email, position=position, uploaddata=uploadd)
      sdata.save()
      

      这执行一个INSERT SQL陈述。

      因为你已经有了对象,只需设置值并调用 save() 作为

      def EuAdmin(request, pk):
          pi = EmailDb.objects.get(id=pk)
          if request.method == 'POST':
              institution = request.POST.get('institution', '')
              fullname = request.POST.get('fullname', '')
              email = request.POST.get('email', '')
              contact = request.POST.get('contact', '')
              position = request.POST.get('position', '')
              uploaded = request.FILES.get('upload', '')
              pi.institution = institution
              pi.fullname = fullname
              pi.contact = contact
              pi.email = email
              pi.position = position
              pi.uploaddata = uploaded
              pi.save()
              return HttpResponseRedirect("/eadmin")
          return render(request, 'NEC/eupdate.html', {'pi': pi})
      

      【讨论】:

        猜你喜欢
        • 2011-05-08
        • 1970-01-01
        • 2022-01-07
        • 2017-08-01
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 2018-03-23
        相关资源
        最近更新 更多