как иметь отношения базы данных с активными данными. в django - PullRequest
2 голосов
/ 07 мая 2020

У меня есть некоторые активные и неактивные данные в моделях СОБЫТИЙ, а для активных данных есть форма ПОСЕТИТЕЛИ, которую нужно заполнить ... пока я пробовал отношения OnetoOne, но это не увенчалось успехом ... я получаю как активное, так и неактивное поле в Модель VISITORs..спасибо за уделенное время.

вот models.py

class Event(models.Model):
      event_id = models.AutoField
        Event_Name = models.CharField(max_length=50)
        description = RichTextField()
        date_And_time = models.DateTimeField()
        location=models.CharField(max_length=50)
        slugs = models.SlugField(max_length= 200,default="")
        picture = models.ImageField(upload_to='wildlife/picture', default="")
        active = models.BooleanField(default=False)

        class Meta:
            ordering = ["date_And_time"]
        def __str__(self):
            return self.Event_Name


class Eventvisitor(models.Model):

    event = models.OneToOneField(Event, on_delete=models.CASCADE,   related_name="eventvistor",default="")
    name = models.CharField(max_length=50)
    email = models.CharField(max_length=70, default="")
    phone = models.CharField(max_length=20,default="")
    date = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-date']
    def __str__(self):
        return self.email

1 Ответ

0 голосов
/ 07 мая 2020

Вы можете ограничить выбор с помощью limit_choices_to=… [Django -doc] . Но, вероятно, вам нужен ForeignKey, так как в противном случае каждый Event может иметь большинство один связанный EventVisitor (a OneToOneField в основном ForeignKey с ограничением unique=True ).

class Eventvisitor(models.Model):
    event = models.ForeignKey(
        Event,
        <b>limit_choices_to={'active': True}</b>,
        on_delete=models.CASCADE,
        related_name='eventvistors'
    )
    name = models.CharField(max_length=50)
    email = models.CharField(max_length=70, default="")
    phone = models.CharField(max_length=20,default="")
    date = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-date']

    def __str__(self):
        return self.email

Обратите внимание, что, хотя можно выбрать только Event s с помощью active=True, если вы позже установите для поля .active значение False, элементы все равно будут ссылаться на него, поскольку отношение не применяется на уровне базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...