Czołem, mam model Skill który ma relację typu owner z profilem. Czyli każdy zalogowany profil może utworzyć skill. Co jeśli skille od róznych profili mają tą samą nazwę (ale zawartość jest inna)? Dodam, że wyrażenia Q i distinct działają wyśmienicie przy "search barze" z pliku utils - eliminują całkowite duplikaty obiektu podczas iteracji. Jak uniknąć dublowania tych obiektów które mają tylko tą samą nazwę? Próbowałem z: skills.values('name').distinct() ale dostaję błąd,że baza SQL nie obsługuje tego a Postgre tak.
zawartość views.py
def skills(request):
skills, search_query = searchSkills(request) # function searchSkills in utils.py
#unique_skills = skills.values('name').distinct().annotate(id=F('pk'))
context = {'skills': skills,'search_query':search_query,}
return render(request, 'dentists/skills.html', context)
oraz zawartość models.py:
class Skill(models.Model):
owner = models.ForeignKey(Profile, null=True, blank=True,on_delete=models.CASCADE)
name = models.CharField(max_length=200, blank=True, null=True)
zawartość utlis.py:
def searchSkills(request):
search_query = ''
if request.GET.get('search_query'):
search_query = request.GET.get('search_query')
skills = Skill.objects.distinct().filter(
Q(name__icontains=search_query) |
Q(description__icontains=search_query) |
Q(owner__name__icontains=search_query) |
Q(tags__in=tags)
)
return skills,search_query
pętla w szablonie: {% for skill in skills %}. Czy jest jakiś prosty sposób na wymienienie wszystkich skilli wszystkich profili ale bez powtórzeń ze względu na nazwę?