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()... но здесь я заблудился.
Любая помощь будет принята с благодарностью.
Большое спасибо!
Карло