Как добавить модель с несколькими услугами и ценами на них в Python/Django

Я только начал изучать Python/Django и у меня есть вопрос к вам, ребята:) Я хочу создать модель в Django, которая позволит мне создать сервис с ценами для каждого пользователя.

Например, Пользователи могут открыть форму, которая позволит им разместить там свои услуги, и цены на каждую услугу.

Но я не знаю, как создать соответствующую модель. Пожалуйста, помогите.

Вы можете определить модель, связывающую услугу и пользователя, содержащую цену, так:

from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import models

class Service(models.Model):
    service_name = models.CharField(max_length=255, unique=True)

    def __str__(self):
        return self.service_name

class ServicePrice(models.Model):
    service = models.ForeignKey(
        Service,
        on_delete=models.CASCADE
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    price = models.DecimalField(max_digits=9, decimal_places=2)

    def clean(self):
        duplicate = ServicePrice.objects.exclude(pk=self.pk).filter(
            user_id=self.user_id, service_id=self.service_id
        ).exists()
        if duplicate:
            raise ValidationError('The price for this service with this user already exists')
        return super().clean()

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['service', 'user'], name='price_per_user_service')
        ]

Здесь мы ссылаемся на модель Service, чтобы указать, для какой услуги мы записываем данные, и на модель пользователя, чтобы указать, сколько стоит услуга, если она выполняется данным пользователем. Ограничение уникальности будет гарантировать, что не может быть двух (или более) ServicePrice для одной и той же услуги и пользователя.

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