Как сделать ForeignKey для двух таблиц в двух разных местах - PullRequest
0 голосов
/ 03 октября 2018

У меня есть 2 таблицы (пользователи, user_shifts) в 2 разных файлах, но которые имеют отношение внешнего ключа друг к другу. В пользователях поле сдвига таблицы является внешним ключом к таблице сдвигов, а в таблице сдвигов, созданной полем, является внешнимключ к таблице пользователя.

Но когда я запускаю сервер, возникает ошибка, которая «не может импортировать пользователей»

класс Users (models.Model):

id = models.AutoField(primary_key=True)
shift = models.ForeignKey(user_shifts)

class Meta:
    managed = False
    db_table = 'users'

класс user_shifts (models.Model):

id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20)
status = models.IntegerField(default=1)
created_date = models.DateField(default=datetime.now().date())
created_by = models.ForeignKey(users)

class Meta:
    managed = False
    db_table = 'user_shifts'

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Это похоже на циклический импорт, когда это происходит, когда python просто прекращает работу и заявляет, что не может импортировать что-либо из цикла, в котором он находился.

Это можно исправить, передав строку в поля ForeignKeyвместо класса, вот так:

class User(models.Model):
    shift = models.ForeignKey(to='shifts_app.UserShift')

class UserShift(models.Model):
    created_by = models.ForeignKey(to='users_app.User')

И обязательно удалите циклические операторы импорта из файлов вашей модели.

0 голосов
/ 03 октября 2018

@ Troma78 предоставили достаточно причин, по которым ваш код получает ошибку.Вы упомянули имя класса Users неверно в user_shifts классе.Вы также должны использовать поле M2M в user_shifts вместо двух FK при обращении друг к другу.

Также существует нарушение стилей кодирования в именовании классов.Обратитесь к PEP8 https://www.python.org/dev/peps/pep-0008/

...