Когда пользователи выбирают категорию при создании группы, Django не отправляет ее в базу данных

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

class Category(models.Model):
    name = models.CharField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='category/%Y/%m/%d', blank=True)

    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'
    
    def __str__(self):
        return self.name

class GroupEx(models.Model):
    categories = models.ForeignKey(Category, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='groups')
    admin = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="group_admin" )
    cover = models.ImageField(upload_to='group_cover')
    group_name = models.CharField(max_length=200, blank=True)
    description = models.TextField(max_length=500, blank=True)
    group_members = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name="members")
    date_posted = models.DateTimeField(auto_now_add=True)


Вот мой вид функции для создания группы

def create_group(request):
    context = {}
    user = request.user
    
    groups = GroupEx.objects.all()
    
    friend_list = FriendList.objects.get(user=request.user)
    friends = friend_list.friends.all()
    if request.method == 'POST':
        group_name = request.POST['group_name']
        #category = request.FILES.get('category',False)
        cover = request.FILES.get('cover',False)
        group_name,created = Group.objects.get_or_create(name=group_name)
        user_obj = Account.objects.get(username=request.user.username)
        group_data = GroupEx(admin=user_obj,
                             group_name=group_name,
                             group=group_name,
                             cover=cover)
        group_data.save()
        return redirect('group:groups')
    context['groups'] = groups

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

 <div>
                    <label for="id_categories" class="font-semibold text-base"> Group Category </label>
                    <select id="id_categories" name="categories"  class="shadow-none selectpicker with-border">
                        <option value="1">Technology</option>
                        <option value="2">Comedy</option>
                        <option value="4">Economics and Trade</option>
                        <option value="5">Education</option>
                        <option value="6">Entertainment</option>
                        <option value="7">Movies & Animation</option>
                        <option value="8">Gaming</option>
                        <option value="9">History and Facts</option>
                        <option value="10">Live Style</option> 
                        <option value="0">Other</option>
                   </select>
                </div>  
 

Я наконец смог обойти эту проблему, сначала установив on_delete=models.SET_NULL, чтобы при удалении группы категория не удалялась вместе с удаленной группой, затем я добавил параметр null = True перед миграцией, чтобы сохранить изменения в базе данных, а затем я внес несколько изменений в представление для создания групп. Это позволило пользователям выбирать связанную категорию для создаваемой группы. Ниже представлено решение для моей модели.

class Gategory(models.Model):
    name = models.CharField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='category/%Y/%m/%d', blank=True)

    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'
    
    def __str__(self):
        return self.name

class GroupEx(models.Model):
    categories = models.ForeignKey(Gategory,on_delete=models.SET_NULL,null=True,related_name="category")
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='groups')
    admin = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="group_admin" )
    cover = models.ImageField(upload_to='group_cover')
    group_name = models.CharField(max_length=200, blank=True)
    description = models.TextField(max_length=500, blank=True)
    group_members = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name="members")
    date_posted = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.group_name

Вот мое решение для функционального представления для создания групп

def create_group(request):
    context = {}
    user = request.user
    
    groups = GroupEx.objects.all()
    
    friend_list = FriendList.objects.get(user=request.user)
    friends = friend_list.friends.all()
    if request.method == 'POST':
        group_name = request.POST['group_name']
        cover = request.FILES.get('cover',False)
        categories = request.POST['categories']
        categories,created = Gategory.objects.get_or_create(name=categories)
        group_name,created = Group.objects.get_or_create(name=group_name)
        user_obj = Account.objects.get(username=request.user.username)
        group_data = GroupEx(admin=user_obj,
                             group_name=group_name,
                             group=group_name,
                             categories=categories,
                             cover=cover)
        group_data.save()
        return redirect('group:groups')
Вернуться на верх