Как добавить модель с несколькими услугами и ценами на них в 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
для одной и той же услуги и пользователя.