Django : получение данных из моделей

У меня серьезная проблема, мне нужно получить набор запросов из несвязанной модели

моя модель:

# problem/models.py

User = get_user_model()

class Problem(models.Model):
    name = models.CharField(max_length=50)
    description = models.CharField(max_length=1000)
    writer = models.ForeignKey(User,models.CASCADE)
    score = models.PositiveIntegerField(default=100) # my perfer is PositiveSmallIntegerField
    
class Submission(models.Model):
    submitted_time = models.DateTimeField(auto_now_add=True)
    participant = models.ForeignKey(User,related_name="submissions",on_delete=models.CASCADE)
    problem = models.ForeignKey(Problem,related_name="submissions",on_delete=models.CASCADE)
    code = models.URLField(max_length=200)
    score = models.PositiveIntegerField(default=0)
# contest/models.py

class Contest(models.Model):
    name = models.CharField(max_length=50)
    holder = models.ForeignKey(User, on_delete=models.CASCADE)
    start_time = models.DateTimeField()
    finish_time = models.DateTimeField()
    is_monetary = models.BooleanField(default=False)
    price = models.PositiveIntegerField(default=0)
    problems = models.ManyToManyField(Problem)
    authors = models.ManyToManyField(User, related_name='authors')
    participants = models.ManyToManyField(User, related_name='participants')

Я пытаюсь получить набор запросов, состоящий из Представления следующим образом :

<QuerySet [<Submission: Submission object (12)>, <Submission: Submission object (6)>, <Submission: Submission object (16)>, <Submission: Submission object (5)>, <Submission: Submission object (11)>, <Submission: Submission object (15)>, <Submission: Submission object (14)>, <Submission: Submission object (4)>, <Submission: Submission object (10)>, <Submission: Submission object (9)>, <Submission: Submission object (3)>, <Submission: Submission object (8)>, <Submission: Submission object (2)>, <Submission: Submission object (13)>, <Submission: Submission object (1)>, <Submission: Submission object (7)>]>

с id модели конкурса, но я не знаю, как это возможно

Если я правильно понял ваш вопрос, то, что вы пытаетесь сделать, невозможно в вашем текущем коде. Если вы хотите получить все объекты Submission, отфильтрованные по определенному идентификатору Contest, вам нужно соединить эти два объекта.

Например, вот пример того, каким должен быть вызов:

submissions_by_contest = Submission.object.filter(contest.id=123) # or whatever the id/pk field is on Contest

Однако, чтобы это работало, вам придется изменить модель Submission на что-то вроде этого:

from contest.models import Contest

class Submission(models.Model):
    submitted_time = models.DateTimeField(auto_now_add=True)
    participant = models.ForeignKey(User,related_name="submissions",on_delete=models.CASCADE)
    problem = models.ForeignKey(Problem,related_name="submissions",on_delete=models.CASCADE)
    code = models.URLField(max_length=200)
    score = models.PositiveIntegerField(default=0)
    contest = models.ForeignKey(Contest,related_name="submissions")

Это соединит модель Submission обратно с Contest как contest.

Возможно, вам придется немного изменить это в зависимости от того, где находятся ваши файлы и в каких подкаталогах находятся модули pythonic, но в целом это должно вас устроить.

EDIT: (на основе контекста из ответа)

Поскольку вы не можете редактировать исходный код, вместо этого вы сделаете что-то вроде этого:

У вас есть соединение, которое идет от Contest (m2m) к Problem, и другое, которое идет от Submission обратно к Problem. Это то, что вы будете использовать.

Сначала у вас есть название конкурса, или id, или какой-то идентификатор. Вы получите этот объект.

contest = Contest.objects.get(name="contest name") # or id

Затем вы захватите все Представления, которые находятся в в contest.problems. Что-то вроде:

submissions_by_contest = Submission.objects.filter(problem__in=contest.problems)

Синтаксис может немного отличаться, но именно такое соединение вы бы использовали.

Вернуться на верх