【问题标题】:Django many to many doesn't work in unittest but works in adminDjango many to many 在 unittest 中不起作用,但在 admin 中起作用
【发布时间】:2016-08-24 07:00:14
【问题描述】:

我有两个通过多对多字段关联的模型。

class Tires(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    brand = models.CharField(max_length=50)

class Car(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    brand = models.CharField(max_length=50)
    tires = models.ManyToManyField('Tires', blank=True)

当我通过管理页面为汽车添加轮胎时它工作正常,但它在我的单元测试中不起作用,我无法弄清楚问题是什么(可能非常简单)

这是我的单元测试:

def test_many_to_many(self):
    tires_1 = Tires(brand='bridgestone')
    tires_1.save()
    car_1 = Car(brand='BMW')
    car_1.save()
    car_1.tires.add(tires_1)
    car_1.save()

这不会引发任何异常,但是当我打印 car_1.tires 时,它会显示 carthings.Tires.None 我已经尝试过相反的方法,将 car_1 添加到 Tires_1.car_set 中,但结果相同。我还尝试在多对多字段中添加不同类的对象只是为了看看会发生什么,这确实会引发错误。所以它看起来像添加工作,但它只是不保存或什么?

【问题讨论】:

  • 把普利司通放在撇号之间。
  • @rfkortekaas 我会编辑它,这不是问题,但我稍微修改了我的模型以在此处显示它

标签: python django django-models many-to-many django-1.8


【解决方案1】:

您可能正在这样做:

>> print car_1.tires
carthings.tires.None

这是“相关对象管理器”的表示。 您可能想要执行以下操作:

>> print car_1.tires.all()
[<Tire 1>]

它返回一个查询集,它的表示更有意义,因为它实际上执行查询以显示关系中的第一个元素。

顺便说一句,在轮胎关系中添加一些内容后,您不需要 save 模型,因为您不需要更新 Cars 表。

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多