с учетом clinic_id, как мне получить моды, относящиеся к профилю пользователя? - PullRequest
0 голосов
/ 10 февраля 2020

Я действительно застрял здесь, и я обдумываю сменить свои модели и запустить fre sh

У меня есть эти модели

class CustomUser(AbstractBaseUser):
    email = models.EmailField(max_length=255, unique=True)
    password2 = models.CharField(max_length=128)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    active = models.BooleanField(default=True)  # Able to login
    practitioner = models.BooleanField(default=False)  # has access to a clinc
    admin = models.BooleanField(default=False)  # superuser
    staff = models.BooleanField(default=False)  # staff
    timestamp = models.DateTimeField(auto_now_add=True)


class Modalities(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


class Profile(models.Model):
    user = models.OneToOneField(User,
                                related_name='prof_user',
                                on_delete=models.CASCADE)
    bio = models.TextField(max_length=5000)
    mods = models.ManyToManyField(Modalities)
    phone = PhoneNumberField()
    clinics = models.ManyToManyField(Clinic)
    personnummer = models.CharField(max_length=12)
    street = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    consent = models.BooleanField()


class Clinic(models.Model):
    practitioner = models.OneToOneField(User,
                                        related_name='prac_user',
                                        on_delete=models.CASCADE)
    lat = models.FloatField(null=True, blank=True)
    lng = models.FloatField(null=True, blank=True)
    name = models.CharField(max_length=128, )
    phone = PhoneNumberField()
    description = models.TextField(max_length=5000)
    street = models.CharField(max_length=128, )
    city = models.CharField(max_length=128, )

С моей точки зрения, я пытаюсь получить моды из модели профиля, начиная с clinic_id

что-то вроде

clinic = Clinic.objects.filter(pk=clinic_id)
profile = get_object_or_404(Profile, user=request.user)
mods = profile.mods

Я пробовал так много вещей за последние несколько часов, и я просто не могу понять это.

Нужно ли менять модели или я получаю неправильный доступ?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2020
profile = Profile.objects.filter(user=Clinic.objects.get(pk=clinic_id).practitioner)
mods = profile[0].mods.all() if profile else []
0 голосов
/ 10 февраля 2020
clinic = Clinic.objects.get(clinic_id)
profile = get_object_or_404(Profile, user=request.user)
mods = profile.mods.filter(name__startswith=clinic.pk)

, но не так, что если clinic_id равен 1, моды, начинающиеся с 10,11,111 и c, также будут выбраны, если у вас нет особого способа ввода имени модальности.

0 голосов
/ 10 февраля 2020

Я считаю, что ваш взгляд должен выглядеть примерно так:

clinic = clinic.objects.get(pk=clinic_id)
profile = profile.objects.get(clinic.practitioner)
mods = mods.objects.filter(pk__in=profile.mods.values_list('pk'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...