Как добавить запись для поиска идентификатора внешнего ключа - PullRequest
0 голосов
/ 06 мая 2018

У меня есть несколько мест, определенных в моей БД. Например, скажем, у меня есть "Mimai" как город. Я пытаюсь понять, как добавить запись Измерение и указать Идентификатор местоположения для города "Майами" в местоположении. Каждое местоположение будет иметь множество измерений .

class Location(models.Model):
    city = models.CharField(('city'), max_length=20)
    geolocation = models.PointField(('location'))

class Measurement(models.Model):
    server      = models.CharField(('server'), max_length=10)
    cpu_util    = models.CharField(('cpu'), max_length=10)
    date        = models.DateField(default=timezone.now)
    location    = models.ForeignKey(Location, on_delete=models.CASCADE)

Вопрос № 1 Буду ли я делать?

m = Measurement.objects.update_or_create(
    server      = "Bubba",
    cpu_util    = "100%",
    location    = Location.objects.get(city="Miami")
)

Или (если это возможно?)

l = Location.objects.get(city="Miami")
m = Measurement.objects.update_or_create(
    server      = "Bubba",
    cpu_util    = "100%",
    location    = l.id
)

Вопрос № 2 Должно быть только 1 Измерение в день для каждого Местоположения . Если Измерение добавляется дважды с одной и той же датой, я полагаю, update_or_create обновит cpu_util , если значение будет другим?

1 Ответ

0 голосов
/ 06 мая 2018

Вопрос 1 : Оба работают (обратите внимание на изменения)

m = Measurement.objects.update_or_create(
    server      = "Bubba",
    cpu_util    = "100%",
    location    = Location.objects.get(city="Miami")
)
Or (if this is possible?)

l = Location.objects.get(city="Miami")
m = Measurement.objects.update_or_create(
    server      = "Bubba",
    cpu_util    = "100%",
    location    = l
)

Вопрос 2 : Добавьте уникальное_все к вашей модели

class Measurement(models.Model):
    server      = models.CharField(('server'), max_length=10)
    cpu_util    = models.CharField(('cpu'), max_length=10)
    date        = models.DateField(default=timezone.now)
    location    = models.ForeignKey(Location, on_delete=models.CASCADE)

    class Meta:
        unique_together = ('location','date')
...