Wyszukiwarka użytkowników w django z tagami

0

Hej
Męczę się z taki o to problemem.
Mam wyszukiwarkę użytkowników. Chcę aby wynikach wyszukiwań był Nick oraz profilowe tagi.

Mam taki kod

models.py

class UserProfile(models.Model):
    objects = None
    user = models.OneToOneField(User, primary_key=True, verbose_name='user', related_name='profile', on_delete=models.CASCADE)
    name = models.CharField(max_length=30, blank=True, null=True)
    bio = models.TextField(max_length=500, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    location = models.CharField(max_length=100, blank=True, null=True)
    picture = models.ImageField(upload_to='uploads/profile_pictures/', default='uploads/profile_pictures/default.png', blank=True)
    followers = models.ManyToManyField(User, blank=True, related_name='followers')
    tag_i = TagsField(max_length=1000, default='non')

views.py

class UserSearch(View):
    def get(self, request, *args, **kwargs):
        query = self.request.GET.get('query')
        profile_list = UserProfile.objects.filter(Q(tag_i__icontains=query) | Q(user__username__icontains=query))
        field_name = 'tag_i'
        obj = UserProfile.objects.first()
        field_object = UserProfile._meta.get_field(field_name)
        field_value = field_object.value_from_objects(obj)
        field_value = "".join(field_value)
        field_value = field_value.split(",")


        context = {
            'profile_list': profile_list,
            "tags": field_value,
        }


        return render(request, 'social/search.html', context)

Obecny kod przepisuje takie same tagi do każdego użytkownika
co powinienem użyć zamiast

    obj = UserProfile.objects.first()

aby tagi wyświetlały się zgodnie z danym użytkownikiem?

2

A gdy by tak posplitować te tagi konkretnego użytkownika przy pomocy template tags? https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/

Przykład:

from django import template
register = template.Library()

@register.filter
def splited_tags(tag):
    return tag.split(",")

No i potem w html, gdzie pewnie iterujesz po tych profilach:

{% for profile in profile_list %}
    bla bla bla
    <div class="tags">
        {% for tag in profile.tag_i | splited_tags %}
            <span>{{ tag }}</span>
        {% endfor %}
    </div>
{% endfor %}

Takie na szybko z głowy, bo dawno nie bawiłem się django. Powinno zadziałać.

1

@ledi12: Dzięki, jeszcze nie ogarniałem filtrów w Django. Dopiero się uczę zarówno pythona jak i django. Wszystko działa jak należy wielkie dzięki. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1