Как я могу создать Django OneToMany Relation? - PullRequest
0 голосов
/ 12 января 2019

Итак, я делаю свой первый сайт и размещаю его на Heroku. Цель веб-сайта - опубликовать вызовы, которые приводят к определенному секретному ключу (вроде очень простого CTF). Когда ключ отправлен, задача решена.

Это код в моем файле models.py

from django.db import models
from django.contrib.auth.models import User


class Post(models.Model):
    """ Each post represents one challenge """
    title = models.CharField(max_length=40)
    text = models.TextField()
    secret_key = models.CharField(max_length=30)
    solved = models.BooleanField(default=False, name='solved')
    file = models.FileField(upload_to='uploads/', null=True, blank=True)
    # solved_by = models.ForeignKey(User, on_delete=models.CASCADE)

    def check_state(self, answer):
        """ Examine whether the challenge was solved """
        if self.secret_key == answer:
            self.solved = True
            self.save()
            return True
        return False

    def __str__(self):
        return self.title

Каждый пост в основном вызов. Решенное значение устанавливается в True, когда кто-то решает задачу / сообщение, а также контролирует, будет ли текст видимым для пользователей. Прямо сейчас, когда кто-то решает проблему, она решается для всех остальных. Я хочу, чтобы каждый пользователь решал каждую задачу, и у него есть своя решаемая переменная для каждой задачи. Я пытался использовать models.Foreign ключ, но он не будет работать. Какое отношение к базе данных мне нужно, чтобы эта работа работала?

1 Ответ

0 голосов
/ 12 января 2019

Похоже, вам нужна таблица UserPost "многие ко многим" между моделями Post и User.

https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/

Таким образом, вы можете иметь уникальные отношения между каждым пользователем и каждой задачей.

FYI. Вы можете делать однострочные комментарии с #, хотя я понимаю описательный подход, которому вы пытаетесь следовать.

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