ValueError: Невозможно назначить " ":" Quiz.truck_name "должно быть экземпляром" truck_name " - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать экземпляр в моем приложении следующим образом:

Views.py

new_quiz = Quiz.objects.create(owner=request.user, comments="Autogenerated", truck_type=truck_type_object,
                                       truck_name=chosen_truck_object)

, где chosen_truck_object это:

    chosen_truck_object = Truckdb.objects.filter(display_name=chosentruck)[0]

И Models.py

class Quiz(models.Model):


    owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quizzes')
    comments = models.TextField(max_length=256, blank=True)
    truck_type = models.ForeignKey(truck_type, on_delete=models.CASCADE, related_name='trucks')
    truck_name = models.ForeignKey(truck_name, on_delete=models.SET_NULL, null=True)


class truck_type(models.Model):
    name = models.CharField(max_length=30)
    color = models.CharField(max_length=7, default='#007bff')

    def __str__ (self):
        return self.name



class truck_name(models.Model):
    truck_type = models.ForeignKey(truck_type, on_delete=models.CASCADE)
    name = models.CharField(max_length=30)

    def __str__ (self):
        return self.name

Как передать экземпляр truck_type и truck_name в модель Quiz в Quiz.objects.create?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020
chosen_truck_object = TruckName.objects.filter(display_name=chosentruck)[0]

вместо фильтра используйте метод get chosen_truck_object = TruckName.objects.get(display_name=chosentruck), это сэкономит

0 голосов
/ 12 марта 2020

Во-первых, вы должны следовать рекомендациям по соглашению об именах, поэтому имя вашей модели должно быть в Camelcase do c как:

class TruckType(models.Model):
    name = models.CharField(max_length=30)
    color = models.CharField(max_length=7, default='#007bff')

    def __str__ (self):
        return self.name



class TruckName(models.Model):
    truck_type = models.ForeignKey(TruckType, on_delete=models.CASCADE)
    name = models.CharField(max_length=30)

    def __str__ (self):
        return self.name

А затем перенесите вашу базу данных и тогда для вашей задачи вам нужно взять TruckName объект вместо Truckdb.

...