2013-08-06 4 views
0

Ну, я хочу автоматически увеличивать поле модели conversation-id, которое не является первичным ключом. В настоящее время я использую следующие строки кодов, которые очень неэффективны.Прирост приращения Django AutoField

web_query_data = WebQuery.objects.all() 

     if not web_query_data: 
      c_id = 0 
     else: 
      for data in web_query_data: 
       c_id = data.conversation_id 


     web_query = WebQuery.objects.create(user_id = request.user.id, sent_to = selected_users, 
              user_query = query,date_time = date_time, conversation_id = c_id + 1) 

Это в основном получает последнее значение поля conversation_id с помощью цикла и увеличивает его на 1.

Я пробовал использовать models.Autofield, который требует, чтобы поле было основным. Но в соответствии с моими потребностями мне нужно вставить данные, которые иногда дублируются на conversation_id

Есть ли лучший и эффективный метод для того же самого?

ответ

1

Вы можете просто получить последний объект и приращение здесь:

query = WebQuery.objects.all().order_by("-id")[0] 
new_query = WebQuery.objects.create(user_id = request.user.id, 
            sent_to = selected_users, 
            user_query = query, 
            date_time = date_time, 
            conversation_id = query.conversation_id + 1) 

(при условии, что «идентификатор» является первичным ключом вашей WebQuery модели)

Я не знаю, если есть способ сделать это автоматически в модели Django.

+0

Ну, есть ошибка с этим. Что, если изначально у меня нет данных в WebQuery, тогда он будет вызывать ошибку «индекс индекса вне диапазона » – PythonEnthusiast

+0

__WebQuery.objects.aggregate (Max ('id')) __ вернет вам dict с вашим максимальным значением – Ricola3D

Смежные вопросы