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但根本没有线索:(
你可以使用Multiform and MultiModelForm的django better forms轻松完成。
pip install django-betterforms
将betterforms
添加到您的INSTALLED_APPS
并按照链接中的文档。
就像@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