'project.Account' не имеет ForeignKey к 'project.Object': Как связать модель счета с объектами проекта?
Я пытаюсь создать сайт объявлений (All
), который может быть виден другим (Users
, для чего я добавил Account
). Для этого я хотел немного изменить профиль пользователя, чтобы добавить такие поля, как телефон, адрес электронной почты...
Поэтому я изменил admin.py
:
from django.contrib import admin
from .models import Todo, Account
from django.contrib.auth.models import User
class AccountInline(admin.StackedInline):
model = Account
can_delete = False
verbose_name_plural = 'Accounts'
class TodoAdmin(admin.ModelAdmin):
readonly_fields = ('created',)
inlines = (AccountInline, )
admin.site.unregister(User)
admin.site.register(Todo, TodoAdmin)
Но вернулся:
<class 'todo.admin.AccountInline'>: (admin.E202) 'todo.Account' has no ForeignKey to 'todo.Todo'.
Поэтому я добавил ForeignKey
к Todo
с account = models.ForeignKey(Account, on_delete=models.CASCADE)
:
from django.db import models
from django.contrib.auth.models import User
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
email = models.CharField(max_length=100)
firstname = models.CharField(max_length=30)
lastname = models.CharField(max_length=50)
company = models.CharField(max_length=5)
def __str__(self):
return self.user.username
class Todo(models.Model):
title = models.CharField(max_length=100)
datetime = models.DateTimeField()
memo = models.TextField(blank=True)
created = models.DateTimeField(auto_now_add=True)
datecompleted = models.DateTimeField(null=True, blank=True)
important = models.BooleanField(default=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
account = models.ForeignKey(Account, on_delete=models.CASCADE)
def __str__(self):
return self.title
Но у меня все еще ошибка.
- Вы случайно написали
unregister
для Users в вашем файле admin.py. Должно бытьadmin.site.register(User)
.
- Вы неправильно интерпретировали ошибку: ошибка гласит, что у вас нет внешнего ключа в вашей модели Account к Todo.
Это означает, что ваш встроенный код администратора некорректен, поскольку он ожидает обратного.