Отношение один-к-одному с двумя моделями (полями) в Django к текущей модели - PullRequest
2 голосов
/ 24 февраля 2020

Как иметь отношение один-к-одному с двумя моделями (полями) в Django (пользователь и продукт должны быть один-к-одному, чтобы просматривать)? Таким образом, один пользователь должен иметь один отзыв на каждый продукт. Есть ли встроенное решение в Django моделях? Очевидно, что иметь их оба чужих ключа было бы неправильно, как указано здесь.

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    title = models.CharField(max_length=255)

class Product(models.Model):
    title = models.CharField(max_length=255)

class Review(models.Model):
    title   = models.CharField(max_length=255)
    user    = ForeignKey(User, on_delete=models.CASCADE)
    product = ForeignKey(Product, on_delete=models.CASCADE)

1 Ответ

1 голос
/ 09 марта 2020

Как я уже упоминал в комментариях: используйте ограничение unique_together. [Django Документы]

Вы устанавливаете его в Meta -классе модели:

class Review(models.Model):
    title   = models.CharField(max_length=255)
    user    = ForeignKey(User, on_delete=models.CASCADE)
    product = ForeignKey(Product, on_delete=models.CASCADE)

    class Meta:
        unique_together = ['user', 'product']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...