Вот моя модельUUIDField не имеет атрибута uuid4
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
import uuid
class PiO(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # surrogate
person = models.ForeignKey(Person, on_delete=models.PROTECT, max_length=25, blank=True)
content_type = models.ForeignKey(ContentType, on_delete=models.PROTECT) # for the various organization types
object_id = models.UUIDField(primary_key=False, default=uuid.uuid4, editable=False) # the uuid of the specific org
content_object = GenericForeignKey('content_type', 'object_id')
Вот мой отслеживающий
AttributeError: 'UUIDField' object has no attribute 'uuid4'.
ПримечаниеЭтот специально ссылающийся на object_id поле, не (рк) поле UUID. В качестве теста я прокомментировал поле object_id. Я сделал не получить сообщение об ошибке, поскольку не имеет поля object_id, и проверка перешла к новой ошибке на 12 строк.
Я гугл точной фразы и получил
No results found for "AttributeError: 'UUIDField' object has no attribute 'uuid4'".
То, что я сделал вид в соответствии с the docs мне.
Что мне не хватает? Имеет ли наличие общего внешнего ключа и/или типа контента какое-либо отношение к нему?
Спасибо. И Sayse для начального комментария, который помог мне и, может быть, стоил ему некоторых очков ;-). Всего несколько вещей. Мне нужно вернуться и реорганизовать мой код, потому что я назвал много pk-полей «uuid». Не конец света. Кроме того, когда я заменил uuid на id как имя поля, он стал синим (тот же цвет, что и «класс» в моей теме Sublime), который был «красным флагом». См. Https://docs.djangoproject.com/en/1.10/topics/db/models/#automatic-primary-key-fields и http://stackoverflow.com/questions/77552/id-is-a-bad- variable-name-in-python. Поэтому я решил просто изменить их все на uuid_ –
UPDATE для всех, у кого есть эта проблема. Хотя Python позволяет uuid_, Django этого не делает, поэтому вам нужно выяснить другое имя. –
Django позволяет поля модели с ведущими подчеркиваниями, например. '_uuid', но не завершающие подчеркивания, например. 'Uuid_'. Сказав это, я не понимаю, почему вы должны найти другое имя. Если вы измените импорт, вы можете сохранить 'uuid'. Кроме того, вы можете просто использовать 'id'. Django использует 'id' для автоматически сгенерированных первичных ключей, поэтому вы также можете использовать его. Я понимаю, что ваш редактор показывает предупреждение, но в этом случае можно игнорировать. – Alasdair