#python #django
#python #django
Вопрос:
Итак, у меня есть две модели: RetailStore
и Product
. Продукт содержит внешний ключ для RetailStore и поле с именем sku
. По сути, мне нужно убедиться, что sku
поле уникально в хранилище, но не между всеми хранилищами, например:
Store1: Product(sku="sku1"), Product(sku="sku2"), Product(sku="sku3"), Product(sku="sku1")
<- не может иметь это последнее, потому что оно уже существует.
Store2: Product(sku="sku1"), Product(sku="sku2"), Product(sku="sku3")
<- Это нормально
Store3: [...]
<- То же самое относится и к другим хранилищам.
Мои модели
class RetailStore(StandardModelMixin):
cnpj = models.CharField(
blank=False, null=False, unique=True, max_length=200, validators=[validate_cnpj], verbose_name="CNPJ"
)
[other fields...]
class Product(StandardModelMixin, SoftDeletionModel):
sku = models.CharField(blank=False, null=False, max_length=200, verbose_name="SKU")
[other fields...]
retail_store = models.ForeignKey(
RetailStore,
on_delete=models.CASCADE,
blank=True,
null=True,
related_name="products",
verbose_name="Retail Store",
)
Ответ №1:
Вы можете использовать UniqueConstraint, чтобы иметь одинаковые артикулы в разных магазинах, но не в одном.
class Product(StandardModelMixin, SoftDeletionModel):
...
class Meta:
constraints = [models.UniqueConstraint(
fields=['sku', 'retail_store'],
name='unique_sku_in_store'
)]
Комментарии:
1. Просто небольшой совет, модели. UniqueConstraint должен быть итеративным, чтобы исправить, просто оберните его с помощью [constraints = models. UniqueConstraint(…)]. Но это сработало, спасибо!
Ответ №2:
Вам нужно будет применить к этому validate_unique.
Django предлагает unique_together, но он предоставляет уникальность одной модели, а не между моделями.
Документы:https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models .Model.validate_unique