Django многие ко многим не работают в unittest, но работают в админке
У меня есть две модели, связанные через поле "многие ко многим".
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 к tyres_1.car_set, но это дает тот же результат. Я также попытался добавить объект другого класса в поле "многие ко многим", просто чтобы посмотреть, что произойдет, что приведет к ошибке. Похоже, что добавление работает, но оно не сохраняется или что-то еще?
1 ответ
Вы, вероятно, делаете это:
>> print car_1.tires
carthings.tires.None
Который является представлением "менеджера связанных объектов". Вы, вероятно, хотите сделать что-то вроде:
>> print car_1.tires.all()
[<Tire 1>]
Который возвращает набор запросов, и его представление является более значимым, поскольку он фактически выполняет запрос, чтобы показать первые элементы в отношении.
Кстати, вам не нужно save
модель после добавления чего-либо в отношения шин, так как вам не нужно обновлять таблицу автомобилей.