Django - создать внешний ключ с логическим значением - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть несколько вопросов на моем сайте, и я хочу, чтобы их видели только те пользователи, которых я хочу.Я создал класс профиля и для каждого профиля хочу создать логическое поле для каждого вопроса.На данный момент мой код выглядит следующим образом:

class Profile(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   accessquestion1 = models.BooleanField(default=True)
   accessquestion2 = models.BooleanField(default=True)
   accessquestion3 = models.BooleanField(default=True)

Могу ли я оптимизировать этот код с помощью своего рода «логического внешнего ключа» ??

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Если вы используете PostgreSQL в качестве бэкэнда, вы можете рассмотреть

  1. , используя поле JSON:

https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/fields/#jsonfield

from django.contrib.postgres.fields import JSONField
from django.db import models

class Profile(models.Model):
    name = models.CharField(max_length=200)
    data = JSONField()

    def __str__(self):
        return self.name

createэто так (не проверено):

Profile.objects.create(name='Rufus', data={'question1': True})
Profile.objects.create(name='Meg', data={'question2': False})

Profile.objects.filter(data__question1=True)
<QuerySet [<Profile: Rufus>]>

2. Массив

https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/fields/#arrayfield

, и каждый индекс будет либо 0 для False, либо 1 для True. Поэтому, если в вашем приложении есть 100 вопросов, у каждого пользователя будет массивразмер 100.

0 голосов
/ 03 февраля 2019

Если я правильно следую за вами, вы хотите создать иностранный ключ, чтобы добавить больше вопросов в профиль.Если это так, то я бы настроил это так.

class ProfileQuestions(models.Model):
    question = models.BooleanField(default=True)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    questions = models.ForeignKey(ProfileQuestions, on_delete=models.CASCADE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...