Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
399 views
in Technique[技术] by (71.8m points)

django - Error message: Employee matching query does not exist

I have model Employee and same table in my local database. I need to have the possibility to edit any record and save it locally. When I have something in the webflow_id field I got this error when I tried to select the edit option: Employee matching query does not exist. When I tried to edit record without this webflow_id it doesn't change, but creates a new record.

my views.py:

def staff_edit(request, webflow_id):

#employees = Employee.objects.all()
#print(employees)

if request.method == 'GET':
    if webflow_id == 0:
        form = EmployeeEditForm()
    else:
        try:
        #employees =  Employee.objects.get(pk=webflow_id)
            employees =  Employee.objects.get(pk=webflow_id)
        except Employee.DoesNotExist:
            raise Http404("Employee DoesNotExist")
        form = EmployeeEditForm(instance=employees)
    return render(request, 'staffedit.html', {'form': form})
else:
    if webflow_id == 0:
        form = EmployeeEditForm(request.POST)
    else:
        employees =  Employee.objects.get(pk=webflow_id)
        form = EmployeeEditForm(request.POST, instance=employees)
    if form.is_valid():
        form.save()
        return redirect('feedback:staff')
    context = {'form': form} #when the form is invalid
    return render(request, 'staffedit.html', context)

models.py:

class Employee(models.Model):
    webflow_id = models.CharField(max_length=100, primary_key=True, default=True)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100, default=True)
    email = models.EmailField(max_length=100)
    user_type = models.CharField(max_length=100)
    status = models.CharField(max_length=100, default=True)
    roles = models.ManyToManyField('Role', through='EmployeeRole')

    def __str__(self):
        return self.webflow_id + " " + self.email + " " + self.first_name + " " + self.last_name

this is my general html staff.html:

 $(document).ready(function() {
                     var data;
                     fetch("http://192.168.2.85:8000/fetchapi_employees/")
                        .then(response => response.json())
                        .then(json => data = json)
                        .then(() => {console.log(data); //this gave me Array of objects from my database
                            $('#datatable').DataTable( {
                            data:           data.employees,
                            deferRender:    true,
                            scrollY:        false,
                            scrollX:        false,
                            scrollCollapse: true,
                            scroller:       true,
                            "columns": [
                                { data: "webflow_id" },
                                { data: "first_name" }, 
                                { data: "last_name" },
                                { data: "email" }, 
                               
                                    { render: function ( data, type, row ) {
                                        return '<a href="http://192.168.2.85:8000/staff/edit/' + row.webflow_id + '"><i class="far fa-edit fa-lg" aria-hidden="true"></i></a>';
                                        
                                    } },
                                    { render: function ( data, type, row ) {
                                        return '<i class="fa fa-plus-circle" aria-hidden="true"></i>';
                                    } },



                            ],
                            "order": [[1, 'asc']]

                        } )
                        
                    })
                    } ); 

staffedit.html:

<div class="container">
    <div class="col-md-10.offset-md-1 mt-5">
      <div class="jumbotron">
        <h1 class="display-4">Edit employee</h1>
        <hr class="my-4">
        <form action="" method="post" autocomplete="off">
            {% csrf_token %}
            {{form.as_p}}
            <button type="submit" class="btn btn-success"><i class="far fa-save"></i> Save</button>
        </form>
      </div>
    </div>
  </div>

forms.py:

class EmployeeEditForm(ModelForm):
    class Meta:
        model = Employee
        fields = [
            'webflow_id',
            'first_name',
            'last_name',
            'roles',
        ]

and this is my urls.py:

  path('staff/edit/<int:webflow_id>', views.staff_edit, name="staffedit"),

Can anyone see what I'm missing? Best regards!

question from:https://stackoverflow.com/questions/65919683/error-message-employee-matching-query-does-not-exist

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

webflow_id is a CharField

webflow_id = models.CharField(max_length=100, default=True)

Url parameter must be contain string:

path('staff/edit/<str:webflow_id>', views.staff_edit, name="staffedit"),

Also your webflow_id is not primary key. If you want to use it as primary key, you have to add primary_key=True.

webflow_id = models.CharField(max_length=100, primary_key=True)

I would also use Try Except for get method:

from django.http import Http404

try:
    Employee.objects.get(webflow_id=webflow_id)
except Employee.DoesNotExist:
    raise Http404("Employee DoesNotExist")

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...