Django: Как настроить тестовый сервер с приборами, но Django модели, содержащие ForeignKeys? - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь напрямую протестировать мой клиентский код (с помощью модуля requests), чтобы вызвать мой Django API. Тем не менее, я хочу автоматизировать это.

Я пытаюсь создать модель с запущенным тестовым сервером. Как я могу заполнить свою базу данных testdb, если у одной из моих моделей есть ForeignKey?

class Customer(models.Model):
    name = models.CharField(max_length=150)
    phone = models.CharField(max_length=12)
    email = models.CharField(max_length=250)


class Load(models.Model):
    load_id = models.CharField(max_length=100, blank=True)
    invoice_id = models.CharField(max_length=100, blank=True)
    >customer = models.ForeignKey(Customer, on_delete=models.CASCADE, blank=True, null=True)
    notes = models.CharField(max_length=500, blank=True)
    carrier = models.ForeignKey(Carrier, on_delete=models.CASCADE, null=True, blank=True)
    driver = models.ForeignKey(Driver, on_delete=models.CASCADE, null=True, blank=True)
    active = models.BooleanField(default=True)

Редактировать: я связал do c, относящийся к этому вопросу. https://docs.djangoproject.com/en/dev/howto/initial-data/

В соответствии с документами:

 [
  # I added the myapp.Band as an example of my issue
  {
    "model": "myapp.Band",
    "pk": 1,
    "fields": {
      "band_name": "The Beatles"
    }
  },
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    # "band": ??? how would I assign?
    }
  }
]

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Вы пробовали смотреть на Natural Keys: https://docs.djangoproject.com/en/dev/topics/serialization/#natural -ключи

1 голос
/ 10 марта 2020

Если у вас есть созданный прибор, обновите настройки базы данных и выполните команду loaddata , чтобы загрузить прибор в базу данных.

0 голосов
/ 10 марта 2020

Светильники часто переоценивают по сравнению с использованием Factoryboy и Faker для генерации тестовых объектов, в том числе больших партий для тестирования представлений списка и представлений Django фильтра. Я нашел эту статью чрезвычайно полезной для объяснения того, как их объединить. Боль с приборами возникает, когда вы добавляете или удаляете поля из ваших моделей и забываете восстановить свои приборы. Или еще хуже, если вы пропустите информацию, которая действительно не должна была быть общедоступной.

Одно предупреждение - не тестируйте фабрики из manage.py shell. Они автоматически сохраняют объекты, которые они генерируют! Вместо этого напишите тест, чтобы проверить фабрики. Чтобы избежать этой ошибки, я поместил все свои фабрики в одно псевдо-приложение с именем fakery и в файле __init.py__ над фабричными кодами

import sys
if len( sys.argv) >= 2 and sys.argv[1].find('shell') >= 0:
    print("\nWARNING -- don't forget that Factories will save all objects they create!\n")

, поэтому, если вы импортируете любой из них в оболочку, Вы видите предупреждение.

...