django и выбор юзеров

Пишу маленькое веб приложение, но столкнулся с проблемой:
1. У материала есть пользователь, он пишется через Foreignkey, и является создателем материала;
2. НО надо еще создать пару полей, где можно выбрать из списка зарегистрированных пользователей, которые не зависят от этого материала и не наследуются им;
Вопрос: как сделать еще два поля выбора пользователя, без подобного костыля?:
def user_choice():
    choices = []
    for item in User.objects.all():
        choices.append((item.username, item.username))
    return choices

class Post(models.Model):
author = models.ForeignKey("auth.user")
video_editor = models.CharField('Монтажер', max_length=500, default="", null=True, blank=True, choices=user_choice())
videographer = models.CharField('Оператор', max_length=500, default="", null=True, blank=True, choices=user_choice())

P.S. Если впарю куплю пиваса:-)
Э-э... А зачем список-то? User.objects.all() и так возвращает список объектов... А в шаблоне можно уже забубенить цикл для выбора конкретного пользователя (передать в шаблон список и прогнать его через цикл)
А что означает
svicer
не зависят от этого материала и не наследуются им
?
Если пользователь должен быть зарегистрирован - тоже установить связь ForeignKey... Может я что-то неправильно понял?
Anton8830
Если пользователь должен быть зарегистрирован - тоже установить связь ForeignKey... Может я что-то неправильно понял?
Проблема:
1. Если я ставлю поле дважжды models.ForeignKey("auth.user") - выходит ошибка и правильно так как один user один материал(создатель)
2. Если я ставлю поле models.ForeignKey(User...)(с импортом соответсвуещего модуля django с settings и т.д.) та же ошибка, но и из нее еще вытекает и следующая...
3. Если я костыляю костылями user_choice() то после миграций на новую базу данных(чистую), django-admin(manage.py) не создает таблицу auth и полей для нее, поскольку уходит в вечный цикл из-за подобного костыля(импорта модуля User). Если создать таблицу auth с дефолтными полями - можно даже создать супер пользователя и все потом хорошо; до этого django-admin валится с руганью на отсутствия этих полей в создаваемой базе данных, поскольку user_choice(), использующая метод User.objects.all(), на нее ссылается.

Но мне надо, дабы приложение ("носилось") с компа на комп в не зависимости от конфигурации и выбора типа базы данных....
А выбирать оператора и мотажера из зарегеных пользователей.
Anton8830
А что означает
svicer
не зависят от этого материала и не наследуются им
я очень плохо объясняю свои проблемы - у меня их очень мало:-; Практики не хватает, вот я и в поисках...
В моём случае: СУБД - mysql
MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| messages       |
| users          |
+----------------+
2 rows in set (0.00 sec)

MariaDB [test]> describe users;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50) | YES  |     | NULL    |                |
| email | varchar(50) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [test]> describe messages;
+--------+---------+------+-----+---------+----------------+
| Field  | Type    | Null | Key | Default | Extra          |
+--------+---------+------+-----+---------+----------------+
| id     | int(11) | NO   | PRI | NULL    | auto_increment |
| text   | text    | YES  |     | NULL    |                |
| author | int(11) | NO   | MUL | NULL    |                |
| user_1 | int(11) | NO   | MUL | NULL    |                |
| user_2 | int(11) | NO   | MUL | NULL    |                |
+--------+---------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

MariaDB [test]>
Т. е. СУБД позволяет создать в таблице два поля, являющиеся внешним ключом на одно и то же поле другой таблицы. Сейчас с django поэкспериментирую...
Все просто... Если установить ForeignKey без параметров:
HINT: Add or change a related_name argument to the definition for 'Messages.user_2' or 'Messages.user_1'.

Вот работающий пример (first_app/models.py):
from django.db import models

# Create your models here.

class Users (models.Model):
  class Meta ():
    db_table = 'users'

  id   = models.AutoField (primary_key = True)
  name = models.CharField (max_length = 50)
  mail = models.CharField (max_length = 50)

class Messages (models.Model):
  class Meta ():
    db_table = 'messages'

  id     = models.AutoField  (primary_key = True)
  text   = models.TextField  ()
  author = models.ForeignKey ('Users', db_column = 'author', related_name = 'author')
  user_1 = models.ForeignKey ('Users', db_column = 'user_1', related_name = 'user_1')
  user_2 = models.ForeignKey ('Users', db_column = 'user_2', related_name = 'user_2')
Тогда в БД создаётся именно то, что нужно.
И да: Тыц
Проверено на sqlite3
Что за эпические костыли вы нагородили?

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
    cutter = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
    videographer = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
lampslave
Огромное спасибо помогло, но надо было еще дописать related_name="+"...
 
Зарегистрироваться или войдите чтобы оставить сообщение.