ОШИБКИ: book.Book.author: (fields.E300) book.Book.author: (fields.E307) - PullRequest
1 голос
/ 10 июля 2019

Мой английский плохой, извините

Это моя структура:

bookstore
---author(app1)
---book(app2)

Или в коде:

from django.db import models
from author.models import Profile

from django.contrib import admin

class Book(models.Model):

      title        = models.CharField(max_length = 150)
      page         = models.IntegerField()
      price        = models.IntegerField()
      author = models.ForeignKey(
      'Profile',
      on_delete=models.CASCADE,)
  publish_date = models.DateField()

  class Meta(object):
    db_table = "book"

class BookAdmin(admin.ModelAdmin):
  pass

admin.site.register(Book, BookAdmin)

У mysql есть некоторые данные, и теперь я хочу использовать их для показа своего веба, а не для создания созданных данных в базе данных. Спасибо, ребята!

У меня есть вопрос:

Мой Django == 1,9, python == 3, windows10

Я хочу использовать mysql (мой контекст базы данных действительно это делает). Когда я найду какой-то ресурс, я увижу, что python manage.py sql [appname] это Django для SQL когда я хочу использовать Django для MySQL. Могу ли я использовать python manage.py inspectdb? Это будет иметь models.py python manage.py sql [appname] = python manage.py inspectdb?

ОШИБКА:

book.Book.author: (fields.E300) Field defines a relation with model 'Profile', which is either not installed, or is abstract.
book.Book.author: (fields.E307) The field book.Book.author was declared with a lazy reference to 'book.profile', but app 'book' doesn't provide model 'profile'.

1 Ответ

1 голос
/ 10 июля 2019

В вашей Book модели вы ссылаетесь с полем с именем author на модель Profile.Поскольку эта модель определена в другом приложении, вы должны ссылаться на нее как app_name.ModelName, поэтому, скорее всего, это будет:

class Book(models.Model):
    title = models.CharField(max_length = 150)
    page = models.IntegerField()
    price = models.IntegerField()
    author = models.ForeignKey(
        <b>'app1.Profile'</b>,  # add name of the app
        on_delete=models.CASCADE,
    )
    publish_date = models.DateField()

Если вы назвали эту модель Author, то каквопрос текст (не код), кажется, предлагает, вы должны использовать app1.Author.Конечно, вы заменяете app1 настоящим именем приложения.

Это описано в документации в ForeignKey [Django-doc] :

Чтобы обратиться к моделям, определенным в другом приложении , вы можете явно указать модель с полной меткой приложения .Например, если указанная выше модель «Производитель» определена в другом приложении, называемом «производство», вам необходимо использовать:

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'production.Manufacturer',
        on_delete=models.CASCADE,
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...