【发布时间】:2019-02-02 10:23:21
【问题描述】:
我有 1 个带有 2 个模型的应用程序“组合”,第 2 个具有第一个 FK,我需要(创建和更新)它的视图。我有第一个模型的完整 CRUD,但我不知道用 fk 模型得到相同的结果。我正在寻找两者的创建和更新视图。但我无法以专辑形式访问项目,因此从项目中选择 FK 以将相关专辑与创建的所有项目之一联系起来
models.py
from django.db import models
from django.contrib.auth.models import User
from ckeditor.fields import RichTextField
# Create your models here.
class Project(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE, default=1)
name = models.CharField(verbose_name='Nombre del proyecto', max_length=200)
client = models.CharField(verbose_name='Nombre del cliente', max_length=200)
description = RichTextField(verbose_name='Descripción')
start = models.DateField(verbose_name='Fecha de Inicio', null=True, blank=True)
ending = models.DateField(verbose_name='Fecha de Finalización', null=True, blank=True)
order = models.SmallIntegerField(verbose_name="Orden", default=0)
created = models.DateTimeField(verbose_name='Fecha de creación', auto_now_add=True)
updated = models.DateTimeField(verbose_name='Fecha de modificación', auto_now=True)
class Meta:
verbose_name = 'Proyecto'
verbose_name_plural = 'Proyectos'
ordering = ['-start', 'order']
def __str__(self):
return self.name
class Album(models.Model):
project = models.ForeignKey(Project, on_delete = models.CASCADE)
title = models.CharField(verbose_name='Título de la imagen', max_length=200, null=True, blank=True)
image = models.ImageField(verbose_name='Imagen', upload_to='portfolio')
created = models.DateTimeField(verbose_name='Fecha de creación', auto_now_add=True)
updated = models.DateTimeField(verbose_name='Fecha de modificación', auto_now=True)
class Meta:
verbose_name = 'Imagen en el album'
verbose_name_plural = 'Imágenes en el album'
ordering = ['created']
def __str__(self):
return self.title
views.py
@method_decorator(staff_member_required(login_url='login'), name='dispatch')
class ProjectCreateView(CreateView):
model = Project
template_name = "core/project_create_form.html"
form_class = ProjectCreateForm
success_url = reverse_lazy('home')
@method_decorator(staff_member_required(login_url='login'), name='dispatch')
class ProjectUpdateView(UpdateView):
model = Project
template_name = "core/project_update_form.html"
form_class = ProjectUpdateForm
@method_decorator(staff_member_required(login_url='login'), name='dispatch')
class ProjectDeleteView(DeleteView):
model = Project
template_name = "core/project_delete_form.html"
success_url = reverse_lazy('home')
forms.py
class ProjectCreateForm(forms.ModelForm):
template_name = 'core/project_create_form.html'
class Meta:
model = Project
fields = [
'name',
'client',
'description',
'start',
'ending',
'order',
]
widgets = {
'name':forms.TextInput(
attrs={
'class':'form-control'}),
'client':forms.TextInput(
attrs={
'class':'form-control'}),
'description':forms.Textarea(
attrs={
'class':'form-control'}),
'start':forms.DateInput(
attrs={
'class':'form-control'}),
'ending':forms.DateInput(
attrs={
'class':'form-control'}),
'order':forms.NumberInput(
attrs={
'class':'form-control'}),
}
class ProjectUpdateForm(forms.ModelForm):
template_name = 'core/project_update_form.html'
class Meta:
model = Project
fields = [
'name',
'client',
'description',
'start',
'ending',
'order',
]
widgets = {
'name':forms.TextInput(
attrs={
'class':'form-control'}),
'client':forms.TextInput(
attrs={
'class':'form-control'}),
'description':forms.Textarea(
attrs={
'class':'form-control'}),
'start':forms.DateInput(
attrs={
'class':'form-control'}),
'ending':forms.DateInput(
attrs={
'class':'form-control'}),
'order':forms.NumberInput(
attrs={
'class':'form-control'}),
}
【问题讨论】:
-
所以您希望在同一页面上同时拥有项目和专辑表单?
-
是的,像这样:Example
-
我可能无法将您带到那里,但这里有一些我保存的链接可以帮助我。 inlineformsets 和 multiple forms.
标签: django django-models django-forms django-class-based-views