Django: Как импортировать модель из того же приложения? - PullRequest
0 голосов
/ 19 января 2020

У меня есть приложение под названием списки .

. Оно имеет 3 основные модели: List, ListItem и School.

Каждый список может быть связанным с 1 школой, или это поле может быть пустым.

Но когда я пытаюсь обновить список моделей, чтобы получить школьное поле, я получаю:

ImportError: cannot import name 'School' from 'lists.models' (D:\web_proyects\scolarte\lists\models.py)  
(scolarte) 

Даже думал, что обе модели находятся в одном файле models.py.

Я пробовал:

from .models import School

И:

from lists.models import School

списки / модели. py:

from django.db import models
from products.models import Product
from roles.models import User
from .models import School

# Create your models here.

class List(models.Model):
    LISTA_STATUS = (
        ('recibida_pagada', 'Recibida y pagada'),
        ('recibida_no_pagada', 'Recibida pero no pagada'),
        ('en_revision', 'En revision'),
        ('en_camino', 'En camino'),
        ('entregada', 'Entregada'),
        ('cancelada', 'Cancelada')
    )
    lista_id = models.CharField(max_length=100)
    name = models.CharField(max_length=100)
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    school = models.OneToOneField(School, on_delete=models.CASCADE)
    status = models.CharField(max_length=20, choices=LISTA_STATUS, default='recibida_pagada')
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return str(self.id)


class ListItem(models.Model):
    lista = models.ForeignKey(List, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    comment = models.CharField(max_length=100, blank=True, null=True, default='')
    uploaded_at = models.DateTimeField(auto_now_add=True)
    step_two_complete = models.BooleanField(default=False)

    def sub_total(self):
        return int(self.product.price)



class School(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100, blank=False)
    address_reference = models.CharField(max_length=100, blank=False)
    provincia = models.CharField(max_length=100, blank=False, null=True)
    canton = models.CharField(max_length=100, blank=False, null=True)
    parroquia = models.CharField(max_length=100, blank=False, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return str(self.name)

1 Ответ

1 голос
/ 19 января 2020

Вам не нужно импортировать School, поскольку он уже в той же модели. Однако вам нужно сначала определить School, прежде чем вы сможете ссылаться на него в другом классе в том же файле модели. Обновите модель, чтобы School было определено до List

from django.db import models
from products.models import Product
from roles.models import User
from .models import School

# Create your models here.
class School(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100, blank=False)
    address_reference = models.CharField(max_length=100, blank=False)
    provincia = models.CharField(max_length=100, blank=False, null=True)
    canton = models.CharField(max_length=100, blank=False, null=True)
    parroquia = models.CharField(max_length=100, blank=False, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return str(self.name)


class List(models.Model):
    LISTA_STATUS = (
        ('recibida_pagada', 'Recibida y pagada'),
        ('recibida_no_pagada', 'Recibida pero no pagada'),
        ('en_revision', 'En revision'),
        ('en_camino', 'En camino'),
        ('entregada', 'Entregada'),
        ('cancelada', 'Cancelada')
    )
    lista_id = models.CharField(max_length=100)
    name = models.CharField(max_length=100)
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    school = models.OneToOneField(School, on_delete=models.CASCADE)
    status = models.CharField(max_length=20, choices=LISTA_STATUS, default='recibida_pagada')
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return str(self.id)


class ListItem(models.Model):
    lista = models.ForeignKey(List, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    comment = models.CharField(max_length=100, blank=True, null=True, default='')
    uploaded_at = models.DateTimeField(auto_now_add=True)
    step_two_complete = models.BooleanField(default=False)

    def sub_total(self):
        return int(self.product.price)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...