Code: Select all
CartObject
[*]
Code: Select all
OnGoingProcess
Code: Select all
class CartObject(models.Model):
object_id = models.CharField(max_length=100, unique=True)
status = models.CharField(max_length=50, choices=[("pending", "Pending")])
# Other fields...
class OnGoingProcess(models.Model):
user = models.OneToOneField(DeliveryProfile, on_delete=models.CASCADE, related_name="ongoing_process")
associated_object = models.OneToOneField(CartObject, on_delete=models.CASCADE, related_name="associated_process", blank=True, null=True)
# Other fields...
< /code>
[b] Aktueller Ansichtscode: < /strong> < /h3>
@user_passes_test(lambda user: user.is_staff)
def process_manager_view(request):
# Get objects that are already assigned in OnGoingProcess
assigned_objects = OnGoingProcess.objects.values_list('associated_object', flat=True)
# Exclude objects that are already assigned
available_objects = CartObject.objects.filter(status="pending").exclude(id__in=assigned_objects).order_by("-id")
context = {
"available_objects": available_objects,
}
return render(request, "useradmin/available-objects.html", context)
< /code>
Problem: < /strong> < /h3>
Ich verwende VALUTE_LIST ('adociated_object', flat = true) < /code>, um die zugewiesenen Objekt -IDs zu extrahieren. Diese Objekte.
Ist dies der effizienteste Weg? /> Alternative Lösungen Ich überlegte: [/b]
[h4] [b] Option 1: Verwendung von isnull = false
Code: Select all
available_objects = CartObject.objects.filter(status="pending").exclude(associated_process__isnull=False)
Code: Select all
from django.db.models import Subquery
assigned_objects = OnGoingProcess.objects.values('associated_object')
available_objects = CartObject.objects.filter(status="pending").exclude(id__in=Subquery(assigned_objects))
Code: Select all
from django.db import connection
with connection.cursor() as cursor:
cursor.execute("""
SELECT id FROM useradmin_cartobject
WHERE status='pending'
AND id NOT IN (SELECT associated_object FROM useradmin_ongoingprocess)
ORDER BY id DESC
""")
result = cursor.fetchall()
available_objects = CartObject.objects.filter(id__in=[row[0] for row in result])
< /code>
[b] Profis: < /strong> Leistungsschub für riesige Daten. Ansatz zum Filterobjekten, während diejenigen ausgeschlossen werden, die bereits zugewiesen sind?
würde values_list()
Code: Select all
isnull=False
Code: Select all
Subquery()