Django:如何设置带有夹具但包含外键的Django模型的测试服务器?

问题描述 投票:0回答:3

我正在尝试直接测试我的客户端代码(使用requests模块)以调用Django API。但是,我想使它自动化。

我想做的是在运行测试服务器的情况下创建模型。如果我的一个模型具有ForeignKey,我如何用夹具填充testdb?

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)

编辑:我链接了与此问题有关的文档。 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?
    }
  }
]
django django-rest-framework django-testing
3个回答
1
投票

如果已创建夹具,请更新数据库设置并运行loaddata命令以将夹具加载到数据库。


0
投票

0
投票

与使用FactoryboyFaker生成测试对象相比,夹具通常被高估,其中包括用于测试列表视图和Django过滤器视图的大批对象。我发现this article对于说明如何将它们结合起来非常有帮助。当您在模型中添加或删除字段而忘记重新生成灯具时,灯具会带来痛苦。更糟糕的是,如果您泄漏了实际上不应该公开获取的信息。

一个警告-请勿从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")

因此,如果将它们中的任何一个导入到外壳中,都会看到警告。

© www.soinside.com 2019 - 2024. All rights reserved.