Отношения OneToOne в модели Django - AttributeError: объект не имеет атрибута
помогите пожалуйста! Я создаю простую систему продажи билетов на техническое обслуживание.
модель Ticket фиксирует начальные данные.
модель UpdateTicket позволяет отвечающему обновлять детали на Ticket, а также включает дополнительное поле для комментария и метку времени. UpdatedTicket имеет отношение OneToOne с Ticket, но я получаю AttributeError: 'Ticket' object has no attribute
когда я пытаюсь получить доступ к связанным данным. (хотя в разделе администратора сайта связи работают нормально)
Вот модели
from django.db import models
from django.utils import timezone
from django.urls import reverse
from members.models import Member
class Ticket(models.Model):
""" model to represent maintenance issue ticket """
# id = models
reporter = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, related_name='+', db_column='reporter')
location = models.ForeignKey(Member, on_delete=models.PROTECT, null=True, related_name='+', db_column='location')
date_reported = models.DateTimeField(default=timezone.now)
description = models.TextField(max_length=100)
contractor = models.ForeignKey('Contractor', on_delete=models.PROTECT, null=True)
class Meta:
ordering = ['date_reported']
permissions = [
("can_message", "add a new message"),
("can_update", "update a ticket"),
]
def __str__(self):
""" string to return the model name as text"""
return f'{self.reporter}, {self.date_reported} GOTO -> '
def get_absolute_url(self):
"""Returns the url to access a particular ticket instance."""
return reverse('maintenance-ticket', args=[str(self.id)])
class UpdatedTicket(models.Model):
ticket = models.OneToOneField(Ticket, on_delete=models.CASCADE, related_name='_ticket', primary_key=True,)
comment = models.TextField(max_length=300, null=True)
date_updated = models.DateTimeField(default=timezone.now)
class Meta:
ordering = ['date_updated']
def __str__(self):
return f'referencing the OneToOneField'
вот что я пробовал с ошибками (отредактировано)
>>> from maintenance.models import Ticket
>>> t = Ticket.objects.filter(id=9).first()
>>> t.updatedticket
AttributeError: 'Ticket' object has no attribute 'updatedticket'
>>> t.ticket
AttributeError: 'Ticket' object has no attribute 'ticket'
>>> t._ticket
KeyError: '_ticket'
sqlite3.OperationalError: no such column: maintenance_updatedticket.ticket_id
The above exception was the direct cause of the following exception:
django.db.utils.OperationalError: no such column: maintenance_updatedticket.ticket_id
и затем, просто для проверки существования данных в таблице UpdatedTicket;
>>> from maintenance.models import UpdatedTicket
>>> UpdatedTicket.objects.all()
sqlite3.OperationalError: no such column: maintenance_updatedticket.ticket_id
django.db.utils.OperationalError: no such column: maintenance_updatedticket.ticket_id
Я думал, что ссылки на поля в таблицах с отношениями OneToOne будут простым делом. Буду очень признателен за помощь в понимании того, где я ошибаюсь.
Заранее спасибо.
Я думаю, что это было вызвано несовпадением идентификаторов моделей, созданных в процессе разработки двух таблиц. Это вроде как было исправлено удалением всех миграций и связанных с ними таблиц из базы данных sqlite из dbshell и началом работы заново.