Пользовательский метод сохранения с условием в модели django

Я пытаюсь сделать проект на django, где пользователь может описывать фотографии, используя один или несколько тегов, как только более одного пользователя введут один и тот же тег для одной и той же фотографии, это слово или тег должны быть сохранены в таблице Tag.

Я подумал, что могу решить эту проблему, добавив пользовательский метод сохранения в модель Tag. Будет ли это правильным подходом или я должен написать эту логику внутри представления?

class Tag(models.Model):
    LANGUAGES = (('en', 'english'),
                 ('de', 'deutsch'),
                 ('fr', 'francais')
                 )
    name = models.CharField(max_length=256)
    language = models.CharField(max_length=256, choices=LANGUAGES)

class Tagging(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    gameround = models.ForeignKey(Gameround, on_delete=models.CASCADE, blank=True, default='')
    picture = models.ForeignKey(Pictures, on_delete=models.CASCADE, related_name='taggings', default='')
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
    created = models.DateTimeField(editable=False)
    score = models.PositiveIntegerField(default=0)

Если я правильно вас понял, вы хотите добавлять новый экземпляр модели Tag всякий раз, когда новый объект Tagging содержит тег, который уже есть в существующем объекте Tagging (т.е. ранее был представлен другим пользователем).

Я бы сделал это в функции просмотра, при обработке данных для объекта Tagging. Каждый раз, когда пользователь отправляет новые теги (метки), для каждого из них проверять, существует ли он уже в базе данных. Если да, создайте новый экземпляр модели тегов и заполните его соответствующими данными.

user_tag = "value of the new tag"

if Tagging.objects.filter(tag=user_tag).exists():
    new_tag = Tag()
    new_tag.name = user_tag
    # set other fields
    new_tag.save()
Вернуться на верх