Django набор запросов не возвращает ни одного или пустого - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь распечатать / получить все, что находится в Property.applicable_platform.event_group, но когда я пытаюсь распечатать их, я получаю пустой набор запросов:

parser.EventGroups.None
or
<QuerySet []>

Вот мои текущие настройки.

class Device(models.Model):
    name = models.CharField(max_length=100)

class EventGroups(models.Model):
    name = models.CharField(max_length=100)


class PlatformDevice(models.Model):
    name = 'Property Specifics'
    property_field = models.ForeignKey('Property', on_delete=models.CASCADE)
    event_group = models.ManyToManyField('EventGroups', blank=True)
    applicable_devices = models.ManyToManyField('Device', blank=True)


class Platform(models.Model):
    name = models.CharField(max_length=255)


class Property(models.Model):
    name = models.CharField(max_length=255)
    applicable_platform = models.ManyToManyField(Platform, through=PlatformDevice)

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

Ответы [ 2 ]

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

1- Очевидно, вы хотите создать «многие ко многим» между Property и Platform, используя сквозную модель как PlatformDevice. Таким образом, в поле m2m необходимо объявить ForeignKey для Platform в PlatformDevice

class PlatformDevice(models.Model):
    name = 'Property Specifics'
    property_field = models.ForeignKey('Property', on_delete=models.CASCADE)
    event_group = models.ManyToManyField('EventGroups', blank=True)
    applicable_devices = models.ManyToManyField('Device', blank=True)
    platform = models.ForeignKey('Platform', on_delete=models.CASCADE)

Кроме того, у вас нет ForeignKey между Platform и EventGroups.

, поэтому запрос платформы (применимая_платформа) не имеет атрибута ' event_group '

вы можете создать m2m между Property, а с помощью сквозной модели как PlatformDevice

Или 2- вы можете изменить отношение apply_devices и event_group m2m к ForeignKey и создать отношение m2m между Property и Platform с помощью сквозную модель как PlatformDevice и добавьте through_fields = ('event_group', 'Applic_devices') attr к этому m2m

Следующий код предназначен для второго метода

class PlatformDevice(models.Model):
    name = 'Property Specifics'
    property_field = models.ForeignKey('Property', on_delete=models.CASCADE)
    event_group = models.ForeignKey('EventGroups', blank=True, on_delete=models.CASCADE)
    applicable_devices = models.ForeignKey('Device', blank=True, on_delete=models.CASCADE)
    platform = models.ForeignKey('Platform', on_delete=models.CASCADE)

class Property(models.Model):
    name = models.CharField(max_length=255)
    applicable_platform = models.ManyToManyField('Platform', through=PlatformDevice,
                                                 through_fields = ('event_group', 'applicable_devices')
                                                )

Надеюсь, это поможет вам

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

Ваша таблица с по должна иметь поля ForeignKey, ссылающиеся на обе таблицы в отношении "многие-ко-многим":

class PlatformDevice(models.Model):
    name = 'Property Specifics'
    event_group = models.ForeignKey('EventGroups', on_delete=models.PROTECT)
    applicable_devices = models.ForeignKey('Device', on_delete=models.PROTECT)

Затем, чтобы сделать запрос, используйте ManyToMany поле соответствующей модели:

properties = Property.objects.all()
event_groups = properties.applicable_platform.all()
...