#django #django-models #django-rest-framework
Вопрос:
Я пытаюсь создать проект django, в котором пользователь может описывать изображения с помощью одного или нескольких тегов, как только несколько пользователей ввели одинаковые теги для одного и того же изображения, это слово или теги должны быть сохранены в таблице тегов.
Я думал, что смогу решить эту проблему, добавив пользовательский метод сохранения в модель тегов. Будет ли это правильным подходом или я напишу эту логику внутри представления?
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)
Ответ №1:
Если я вас правильно понимаю, вы хотите добавлять новый экземпляр модели тегов всякий раз, когда новый объект тегов содержит тег, который уже находится в существующем объекте тегов (т. Е. Ранее был отправлен другим пользователем).
Я бы сделал это в функции просмотра при обработке данных для объекта пометки. Всякий раз, когда пользователь отправляет новые теги (метки), для каждого из них проверьте, существует ли он уже в базе данных. Если да, создайте новый экземпляр модели тегов и заполните его соответствующими данными.
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()
Комментарии:
1. Спасибо! Это, безусловно, помогает. Как бы я мог разрешить ввод данных пользователем? Таким образом, я могу передать user_tag в качестве параметра в метод представления или что-то в этом роде?
2. О, я предполагал, что у вас уже есть какой-то интерфейс (часть вашего приложения, которая находится в браузере пользователя). Самый простой способ сделать это-использовать простую HTML-страницу, которая отображает изображение и имеет форму для ввода пользователем. Затем вы можете получить эти данные с помощью запроса POST при отправке формы. Более сложные методы будут использовать шаблоны Django или фреймворк Javascript, например React. Если все эти концепции для вас совершенно новы, вы можете подумать об онлайн-курсе. Я могу порекомендовать курс веб-программирования CS50 ( cs50.harvard.edu/web/2020 ).