Django在View中使用ManyToManyField数据

问题描述 投票:0回答:2

models.朋友

class Profile(models.Model):
    profile_name = models.CharField(max_length = 255, blank = False)
    extra_profile_text = models.CharField(max_length = 50, blank = False)

class Category(models.Model):
    category_name = models.CharField(max_length = 50, blank = False)
    extra_category_text = models.CharField(max_length = 50, blank = False)

class ProfileCategory(models.Model):
    profile = models.ManyToManyField(Profile)
    category = models.ManyToManyField(Category)

forms.朋友

class ProfileCategoryForm(forms.ModelForm):

    class Meta:
        model = ProfileCategory
        fields = ('profile', 'category',)

views.朋友

def task(request): 

    if request.method == "POST":
        form = ProfileCategoryForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user

            #use [profile_name, extra_category_text data] that user selected

            post.save()
            form.save_m2m()
            return redirect('somewhere')
    else:
        form = ProfileCategoryForm()
    context = {'form': form }
    return render(request, 'some_app/somewhere.html', context)

当用户从ProfileCategoryForm中选择时,我想在视图中显示“profile_name”,“extra_category_text”数据。进程将为Front:用户选择Profile之一,Category> Save Back:获取用户选择的Profile,Category datas(例如:profile_name,extra_profile_text)>执行一些任务>保存到ProfileCategory模型。

似乎我需要使用queryset但根本没有线索:(

django
2个回答
0
投票

你可以使用Multiform and MultiModelFormdjango better forms轻松完成。

pip install django-betterforms

betterforms添加到您的INSTALLED_APPS并按照链接中的文档。


0
投票

就像@gitblame所说,你创造了这样一个复杂的模型。您可以更改模型以便于查询。

前:用户选择一个配置文件,其中一个类别>保存

我们通常这样做,将数据返回到html,显示并处理它。

# You can create js file and capture event of class/id changed and request to api server 
#(if you want to check like: 1 Profile and can select only Category relate only)

返回:获取用户选择的配置文件,类别数据(例如:profile_name,extra_profile_text)>执行某项任务>保存到ProfileCategory模型。

您可以这样做,检查表单提交到views.py或签入模型时(覆盖保存方法,其他任何...)

链接到django override method

© www.soinside.com 2019 - 2024. All rights reserved.