Простая вставка и удаление базы данных через приложение Ajax в Django - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над приложением Django, в котором участвуют разные люди, компании и продукты. Я хотел бы включить возможность авторизованных пользователей в «избранном» числе людей, компаний и продуктов. Я довольно новый Django разработчик, и мои знания по Javascript скудны, поэтому я изо всех сил пытаюсь применить существующие уроки по Django / Ajax к моей ситуации. Вот что у меня так далеко. Я собираюсь включить лишь немного о предпочтении человека, так как я предполагаю, что решение для предпочтения компаний и продуктов будет практически идентичным.

# models.py (relevant tables only)
class Person(models.Model):
    first_name = models.CharField(max_length=50)
    middle_name = models.CharField(max_length=50, blank=True)
    # many other irrelevant fields omitted


class CustomUser(AbstractUser):
    fav_people = models.ManyToManyField(Person,
                                        through='FavoritePerson',
                                        through_fields=('user', 'person'),
                                        related_name='users',
                                        )
    fav_companies = models.ManyToManyField(Company,
                                           through='FavoriteCompany',
                                           through_fields=('user', 'company'),
                                           related_name='users',
                                           )
    fav_products = models.ManyToManyField(Product,
                                          through='FavoriteProduct',
                                          through_fields=('user', 'product'),
                                          related_name='users',
                                          )

    class Meta:
        verbose_name_plural = 'Custom Users'

    def __str__(self):
        if self.first_name and self.last_name:
            return f"{self.first_name} {self.last_name}"
        else:
            return f"{self.username}"


class FavoritePerson(models.Model):
    user = models.ForeignKey(CustomUser,
                             on_delete=models.CASCADE,
                             related_name='favorite_people'
                             )
    person = models.ForeignKey(Person,
                               on_delete=models.CASCADE,
                               null=True,
                               blank=True,
                               related_name='favorite_people', )
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'Favorited People'

    def __str__(self):
        return f"{self.user} - {self.person}"

Вот соответствующая часть моего шаблона, где он отображает контур звезды если человек не фаворит и заполненная звезда, если человек является фаворитом вошедшего в систему пользователя. Я использую пакет django -fontawesome-5 для значков.

<!-- person_detail.html -->
<section id="entity-details">
  <div class="container">
    <div id="entity-bio-col">
      {% if person in user.fav_people.all %}
        {% fa5_icon 'star' 'fas' color='white' size='fa-xs' title='One of your favorite pros' %}
      {% else %}
        {% fa5_icon 'star' 'far' color='white' size='fa-xs' title='Favorite this pro' %}
      {% endif %}
    </div>
  </div>
</section>

Все, что мне нужно сделать, это вставить строку в таблицу FavoritePerson, когда я нажимаю пометить звездочкой и удалить эту строку в таблице, когда я нажму на заполненную звездочку. Я хотел бы, чтобы это работало без ссылки на страницу sh, следовательно, подход Ajax.

Будет ли кто-то готов предоставить решение? Я могу взять это и бежать оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...