2017-09-25 92 views
1

我为api和模型创建测试。问题是测试模型是否被创建。 用户模型是这样的一个:ValueError:无法分配“受让人”:“任务。受让人”必须是“用户”实例

class User(AbstractUser): 
    CUSTOMER = 1 
    EXECUTER = 2 

    USER_TYPES = (
     (CUSTOMER, 'Customer'), 
     (EXECUTER, 'Executer'), 
    ) 

    user_type = models.IntegerField(choices=USER_TYPES, default=EXECUTER, verbose_name='Тип пользователя') 
    balance = models.DecimalField(decimal_places=2, max_digits=7, default=0, verbose_name='Баланс') 

    def __str__(self): 
     return self.username 

任务模式是这样的:

class Task(models.Model): 
    title = models.CharField(max_length=255, verbose_name='Заголовок') 
    description = models.CharField(max_length=255, verbose_name='Описание') 
    money = models.DecimalField(max_digits=7, decimal_places=2, default=0, verbose_name='Цена') 
    assignee = models.ForeignKey('users.User', related_name='assignee', null=True, verbose_name='Исполнитель') 
    created_by = models.ForeignKey('users.User', related_name='created_by', verbose_name='Кем был создан') 

我想测试模型的创建,但测试模型并不想进行。问题出在受让人身上,由领域创造。 这是我的测试:

def test_creating_models_instance(self): 
     User.objects.create(username="assignee", first_name="First_name_2", last_name="Surname_2", 
          user_type=2, balance="16155.00") 
     User.objects.create(username="created_by", first_name="First_name_1", last_name="Surname_1", 
          user_type=1, balance="16155.00") 
     Task.objects.create(title="Task_1", description="Description_1", money="155.00", 
          assignee="assignee", created_by="created_by") 

而且我有错,如:

self.field.remote_field.model._meta.object_name, 
ValueError: Cannot assign "'assignee'": "Task.assignee" must be a "User" instance. 
+0

什么是你的问题,你试图把字符串而不是实例'受让人=“受让人”'? –

回答

1

您需要使用实例,而不是字符串:

def test_creating_models_instance(self): 
     assignee = User.objects.create(
      username="assignee", first_name="First_name_2", 
      last_name="Surname_2", user_type=2, balance="16155.00") 
     created_by = User.objects.create(
      username="created_by", first_name="First_name_1", 
      last_name="Surname_1", user_type=1, balance="16155.00") 
     Task.objects.create(title="Task_1", description="Description_1", money="155.00", 
          assignee=assignee, created_by=created_by) 
     #       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
相关问题