如何在kwargs中使用UUID字段?

时间:2018-04-17 03:24:17

标签: python django django-models django-rest-framework django-testing

我是Django的新手,我正在进行单元测试。这是我的模特:

class RandomModel(models.Model):
    title = models.CharField(max_length=64, null=False, blank=False)
    parent_user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
    parent_course = models.ForeignKey(Course, on_delete=models.CASCADE, default=1)
    unique_id = models.UUIDField(
                                default=uuid.uuid4,
                                editable= False,
                                unique=True)

这是我的urls.py

path('myPath/retrieve/<uuid:unique_id>', views.RetrieveABCAPIView.as_view(), name = myPath_retrieve)

我在test.py

中尝试以下操作
class APIStatusCodeTests(APITestCase):

    def setUp(self):
        """
        Sets up testing environment. Add all endpoints to be tested
        """
        tbl = RandomModel.objects.create(title = 'rofl')
        tbl.save()

    self.retrieve_method_endpointsdeck = [
        reverse('flashcards:flashcards_api:myPath_retrieve', kwargs = {'unique_id': RandomModel.objects.unique_id('unique_id')})

我应该对反向功能做出哪些改变?我不知道如何在kwargs中获得UUID?

谢谢!

1 个答案:

答案 0 :(得分:1)

您已在测试设置方法中创建了RandomModel对象,因此您需要在reverse中使用该对象的UUID - 类似这样的内容:

reverse(
    'flashcards:flashcards_api:myPath_retrieve', 
    kwargs={'unique_id': RandomModel.objects.first().unique_id}
)

请注意,这将获取数据库中找到的第一个RandomModel对象 - 您可能希望更具体地了解要使用的对象 - 或者在此测试中创建一个对象。< / p>