簡體   English   中英

Django:以表格形式添加相關模型(ForeignKey)的字段

[英]Django: add fields of the related model (ForeignKey) in the form

我有主要模型Entertainment和相關模型EntertainmentCollage。 現在,我正在為我的模型編輯頁面,在其中需要轉移以編輯兩個模型。 我了解如何將一種表單轉換為表單,但是使用相關模型很難。

   class Entertainment(models.Model):
        main_photo = models.ImageField(upload_to = 'where/')
        place = models.CharField(max_length=200)
        description = models.CharField(max_length=200)
        event_date = models.DateTimeField(auto_now_add=False,  blank=True, null = True) 

class EntertainmentCollage(models.Model):
    img = models.ImageField(upload_to = 'entertainment/portfolio', blank = True)
    album = models.ForeignKey(Entertainment, blank = True, null = True)

forms.py

class WhereCreateForm(ModelForm):
    class Meta:
        model = Entertainment
        fields = ['main_photo','place','description', 'event_date' ]

views.py

def edit_where(request, pk):
    place = Entertainment.objects.get(id=pk)

    form = WhereCreateForm(instance=place)

    if request.user.is_authenticated():
        if request.method == "POST":
            form = WhereCreateForm(request.POST, request.FILES, instance=place)

            if form.is_valid():
                form.save()                           
            return redirect('entertainment:where_list') 
    else:
        form = WhereCreateForm()
    return render(request, "entertainment/where_edit.html", {'form': form})

HTML

<form method = "post">
                    {% csrf_token %}
                        <p>{{ form.description }}</p>
                        <p>{{ form.place }}</p>
                        <p>{{ form.event_date }}</p>

                </div>
                <div class="col-md-9">
                    <section class="admin-section">
                        <div class="row">
                            <div class="col-md-4 admin__block" is-cover="false">
                                <div class="cover__wrapper edit__wrapper">
                                    <a class="delete-button">Delete</a>
                                    <a class="make-cover-button">Cover</a>
                                    <img src="img/place-placeholder-1.jpg" alt="">
                                </div>
                            </div>

                        </div>
                        <a href="#" class="button">Add photo</a>
                    </section>
                    <section>
                        <h4>Description</h4>
                        {{ form.description }}
                        <a href="#" class="button">Save</a>
                        <a href="#" class="button">Cancel</a>
                    </section>
                    </form>

正如@ art06在他的評論中所說,您可以使用內聯表單集

您可以執行以下操作:

from django.forms import inlineformset_factory

def edit_where(request, pk):
    place = Entertainment.objects.get(id=pk)
    FormSet2 = inlineformset_factory(Entertainment, EntertainmentCollage) 
    form = WhereCreateForm(instance=place)
    form2 = FormSet2() 

    if request.user.is_authenticated():
        if request.method == "POST":
            form = WhereCreateForm(request.POST, request.FILES, instance=place)
            form2 = FormSet2(request.POST or None, instance=place) 

            if form.is_valid():      
                if form2.is_valid():
                    form.save()  
                    form2.save()                    
            return redirect('entertainment:where_list') 
    else:
        form = WhereCreateForm()
        form2 = FormSet2() 
    return render(request, "entertainment/where_edit.html", {'form': form, 'form2': form2})

要將新表單添加到模板中,可以使用:

{{ form2.management_form }}    
{% for frm in form2 %}
    {{ frm.as_table }}
{% endfor %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM