Заполнение вариантов выбора из других объектов Модели

Небольшой вопрос, я не могу понять, как заставить это работать и мне нужна помощь.

Проблема Мне нужно иметь возможность запрашивать объекты другой модели, чтобы использовать их для выбора в другой модели. Я думал о внешнем ключе, но мне действительно не нужно, чтобы он расширял другую модель.

У меня есть группа под названием Group, которая будет отображать варианты выбора из другой модели под названием Games. Эти объекты уже будут сохранены в базе данных. Я просто не могу понять, как отобразить эти варианты.

Models.py для модели, в которой мы пытаемся отобразить выбор

game - это поле, которое мы хотим выбрать из модели Games

from django.db.models.aggregates import Max

from games.models import Games


# Create your models here.

class Group(models.Model):

    name = models.CharField(max_length=200)
    game = models.ForeignKey(Games, on_delete=models.CASCADE)
    size = models.IntegerField()
    total_size = models.CharField(max_length=200)
    play_time = models.DateTimeField()
    description = models.TextField(max_length=200)
    roles = models.CharField(max_length=200)
    is_full = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.name

Models.py из модели, из которой мы хотим сгенерировать варианты выбора. Я хочу использовать поле name из этой модели для выбора на поле Group game.

from django.db import models
from django.db.models.aggregates import Max


# Create your models here.

class Games(models.Model) :
    GENRE_CHOICES = [
        ('Action', 'Action'),
        ('Acion-Adventure', 'Action-Adventure'),
        ('Adventure', 'Adventure'),
        ('MMO', 'MMO'),
        ('Puzzle', 'Puzzle'),
        ('Role Playing', 'Role Playing'),
        ('Simulation', 'Simulation'),
        ('Strategy', 'Strategy'),
        ('Sports', 'Sports')
         ]

    RATING_CHOICES = [
        ('E', 'Everyone'),
        ('E10+', 'Everyone 10+'),
        ('T', 'Teen'),
        ('M', 'Mature 17+'),
        ('A', 'Adults Only 18+'),
        ('RP', 'Rating Pending')
         ]

    PLATFORM_CHOICES = [
        ('Multi', 'Multi Platform'),
        ('PC', 'PC'),
        ('XBOX', 'XBOX'),
        ('Playstation', 'Playstation'),
        ('Nintendo', 'Nintendo')
         ]

    name = models.CharField(max_length=200)
    platform = models.CharField(max_length=20,
                                null=True,
                                choices=PLATFORM_CHOICES,
                                default='Select'
    )
    publisher = models.CharField(max_length=100)
    genre = models.CharField(max_length=100,
                             null=True,
                             choices=GENRE_CHOICES,
                             default='Select'
                             )
    rating = models.CharField(max_length=15,
                              null=True,
                              choices=RATING_CHOICES,
                              default='Select'
                              )
    release_date = models.DateField()
    tags = models.CharField(max_length=200)
    picture = models.ImageField(
        max_length=200,
        default='games/default.png',
        null=True,
        upload_to='games/'
    )
    is_new = models.BooleanField(null=True)
    is_popular = models.BooleanField(null=True)
    is_featured = models.BooleanField(null=True)

    def __str__(self):
        return self.name

Итак, проблема была не в models.py, а в моем forms.py - я не определял ModelChoiceField для этого. Поэтому в моем Forms.py я добавил следующее:

class GroupForm(forms.ModelForm):
    class Meta():
        model = Group
        fields = ['name', 'game', 'size', 'total_size', 'play_time', 
                  'description', 'roles']

    game = forms.ModelChoiceField(queryset=Games.objects.all())
Вернуться на верх