Django - как сделать теги на основе каждого пользователя

в проекте Django, который использует django-taggit (https://pypi.org/project/django-taggit/)

Я хотел бы сделать теги на основе каждого пользователя, таким образом каждый пользователь может определить свой собственный набор тегов.

Я настраиваю следующую модель:

# models.py
from django.db import models
from taggit.models import Tag
from django.contrib.auth.models import User
# Create your models here.
class MyTag(Tag):
    """ You must make taggit.models.Tag an abstract model"""
    user = models.ForeignKey(User, related_name="to_tags", on_delete=models.SET_NULL)

    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


    def save(self, args, kwargs):
        user = kwargs.pop('user')
        self.user = user

        super(MyTag, self).save(*args, **kwargs)

затем для управления я бы использовал нормальную форму (в этом случае теги предназначены для фотомодели)

# forms.py
class PhotoForm(forms.ModelForm):
    class Meta:
        model = Photo
        fields = ('name', 'artistic_name', 'description', 'tags', 'is_top', 'note')
        widgets = {
            'description': forms.Textarea(attrs={'rows': 2}),
            'note': forms.Textarea(attrs={'rows': 2})
        }

Теперь вопрос... как мне сохранить пользователя в модели MyTag? Я должен передать его экземпляру формы в представлении, делая что-то вроде:

def photo_detail(request, photo_id):
    ...
    form = PhotoForm(request.POST or None, user=request.user)
    ...
    if request.method == 'POST':
        if form.is_valid():
            form.save()
    ...

первый вопрос...я должен передавать пользователя когда создаю экземпляр формы, или когда вызываю метод сохранения...? Тогда мне придется перехватить Tag.save()... но здесь я заблудился.

Любая помощь будет принята с благодарностью.

Большое спасибо!

Карло

Вернуться на верх