Отношения 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 и началом работы заново.

Вернуться на верх