Как добавить любое количество пользователей в одну и ту же таблицу в postgres? - PullRequest
0 голосов
/ 28 июня 2018

Я использую postgres и django, и у меня есть таблица, определенная ниже в postgres

       Column        |          Type          | Modifiers 
---------------------+------------------------+-----------
 id                  | integer                | 
 context_name        | character varying(100) | 
 context_description | character varying(100) | 
 context_priority    | character varying(1)   | 
 users               | integer                | 

Ниже приведена соответствующая модель в django

class Contexts(models.Model):
    context_name = models.CharField(max_length=50)
    context_description = models.TextField()
    context_priority = models.CharField(max_length=1)
    users = models.PositiveIntegerField(null=False)

Примечание: Я не могу запустить makemigrations, так как у меня есть некоторые проблемы с настройками. Поэтому я создаю таблицу вручную в postgres и определяю связанную модель в django.

Теперь эта таблица в основном представляет собой группу context_name, которая может иметь много пользователей. Поэтому я получаю запрос JSON и добавляю пользователя в таблицу. Ниже приведен JSON

{
"user" : 5,
"action" : "add",
"context_name": "network debug",
"context_description" : "Group for debugging network issues",
"context_priority": "L"
}

Вот код, который обрабатывает операцию

@csrf_exempt
def context_operation(request):
    user_request = json.loads(request.body.decode('utf-8'))
    if request.method == "POST":
        try:
            if user_request.get("action") == "add":
                conv = Contexts.objects.create(
                    context_name=user_request.get("context_name"),
                    context_description=user_request.get("context_description"),
                    context_priority=user_request.get("context_priority"),
                    users=user_request.get("user")
                )
                #print(conv.users)
        except Exception as e:
            print("Context saving exception", e)
            return HttpResponse(0)
        return HttpResponse(1)

Теперь, когда я запускаю этот код и приходит запрос, я могу успешно сохранить пользователя 5 в группе network debug, но если я получаю тот же запрос снова, но с другим идентификатором пользователя 7, он создает снова та же группа и назначает пользователя 7. Так у меня есть две одинаковые группы, но разные пользователи.

Как я могу гарантировать, что если context_name одинаково, я могу добавить любое количество пользователей?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете иметь две разные модели, как показано ниже.

class Contexts(models.Model):
    context_name = models.CharField(max_length=50)
    context_description = models.TextField()
    context_priority = models.CharField(max_length=1)


class ContextUsers(models.Model):
    context = models.ForeignKey('Contexts', null=False)
    user = models.PositiveIntegerField(null=False)

При получении нового контекста создайте его, назначьте существующий контекст и сделайте запись в ContextUser. Таким образом, для нескольких пользователей с одинаковыми контекстами у вас будут таблицы, как показано ниже:

Context

 id | context_name | context_description | context_priority
  1 |  c1          | some descriptions   | a
  2 |  c2          | some other descr.   | b


ContextUsers

context_id | user
  1        | 1
  1        | 2
  1        | 3
  2        | 1
  2        | 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...