Как создать общие отношения без добавления зависимостей между приложениями в Django?

У меня есть приложение для магазина электронной коммерции, в котором есть такие приложения:

  1. ядро: специфическое приложение для магазина электронной коммерции.
  2. likes: независимое приложение многократного использования, которое должно использоваться с различными моделями из других приложений.
  3. store: независимое многоразовое приложение, которое имеет модели и представления для приложения электронной коммерции.

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

Модель LikedItem из likes app:

from django.conf import settings
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey

class LikedItem(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey()

Модель из Product : <<<3>> store app >

class Product(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField()
    description = models.TextField(null=True, blank=True)
    unit_price = models.DecimalField(
        max_digits=6,
        decimal_places=2,
        validators=[MinValueValidator(1)])
    inventory = models.IntegerField(validators=[MinValueValidator(0)])
    last_update = models.DateTimeField(auto_now=True)
    collection = models.ForeignKey(
        Collection, on_delete=models.PROTECT, related_name='products')
    promotions = models.ManyToManyField(Promotion, blank=True)

    def __str__(self) -> str:
        return self.title

    class Meta:
        ordering = ['title']

Я попытался реализовать это в основном приложении, я начал с создания модели CustomProduct, которая расширяет модель Product и добавляет likes = GenericRelation(LikedItem), но все стало запутанным в части сериализатора, так как я не мог расширить сериализатор Product и добавить в него поле likes, и я почувствовал, что мне, возможно, нужно полностью реализовать модель Product только в основном приложении.

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