我想为具有多对多关系的Django模型编写测试,但是我收到了这个错误:
ValueError:“< Tour:tour>”需要在之前有字段“id”的值 可以使用这种多对多的关系。
我的测试:
class ModelTestCase(TestCase):
def setUp(self):
self.mock_file = mock.MagicMock(File)
self.mock_file.name = 'MockFile'
self.before_count = Tour.objects.count()
self.tour_agency = TourAgency.objects.create(
name='agency',
username='agency')
self.tour_category = TourCategory.objects.create(name='category')
self.tour_equipment = TourEquipment.objects.create(name='equipment')
self.tour_leader = TourLeader.objects.create(
name='leader',
email='leader@sample.com',
username='leader',
bio='sample text',)
self.tour_tag = TourTag.objects.create(name='tag')
def test_model_can_create_tour(self):
self.tour = Tour.objects.create(
name='tour',
description='description',
summary='summary',
agency=self.tour_agency,
equipment=self.tour_equipment,
category=self.tour_category,
tags=self.tour_tag,
activity_type='activity type',
date=datetime.now,
photo=self.mock_file)
self.tour.save()
self.tour.save_m2m()
count = Tour.objects.count()
self.assertNotEqual(self.before_count, count)
我会尝试使用.save()
保存对象但不起作用。
答案 0 :(得分:1)
首先需要在添加多对多关系之前保存游览模型。查看代码,我认为多对多是字段'标记'
def test_model_can_create_tour(self):
self.tour = Tour.objects.create(
name='tour',
description='description',
summary='summary',
agency=self.tour_agency,
equipment=self.tour_equipment,
category=self.tour_category,
activity_type='activity type',
date=datetime.now,
photo=self.mock_file)
# Adding the tour later.
self.tour.tags.add(self.tour_tag)
count = Tour.objects.count()
self.assertNotEqual(self.before_count, count)
这应该通过测试。
答案 1 :(得分:0)
要给模型添加标签(m2m字段),先保存模型,然后再给模型添加标签
self.tour.tags.add([tag names])