Home > OS >  Django - Filter out All Values from one Field in Model and Delete
Django - Filter out All Values from one Field in Model and Delete

Time:01-01

Part of my django website is that when a user deletes one value from one model it deletes all data within a field of another model. Currently I am having trouble filtering out all values from a field in a model to delete. I know all my other code works because as a test I can do...

delete = Data_Repo1.objects.all()filter(user=request.user)
delete.delete()

This works great when inputed into my code below. My problem is that I need to delete all data from a field called "date1" in a model called "Data_Repo1" not delete all data from all field in a model called "Date_Repo1". I have tired "values("date1")" and "values_list("date1")" in place of ".all()" in the above code but I get the error "Cannot call delete() after .values() or .values_list()". How else can I "filter" out all values from one field from one model in order to delete them?. Code Below. Thanks in advance.

def deletefield_repo1(request, pk):
context = {}
title = get_object_or_404(Field_Repo1, pk=pk)                                                                    #Title is needed to have the database value to delete
context['title'] = Field_Repo1.objects.values_list('title', flat=True).filter(user=request.user).get(pk=pk)      #Just to print the name fo the field to delete for the user
type = Field_Repo1.objects.values_list('type', flat=True).filter(user=request.user).get(pk=pk)
if request.method == "POST":
    title.delete()
    if type == 'Date1':
        delete = Data_Repo1.objects.values('date1').filter(user=request.user)
        delete.delete()
    return HttpResponseRedirect('/front_page/sheets/repository1user/')

return render(request, 'sheets/delete_fields/repo1_delete_field.html', context)

CodePudding user response:

You could use the update() function however this would not save the values.

Therefore, I would suggest iterating the filtered queryset and change the field to None assuming null=True in your model definition.

qs_to_remove = Data_Repo1.filter(user=request.user)
for instance in qs_to_remove:
    instance.date1 = None
    instance.save()
  • Related