использовать пользовательскую форму внутри шаблона, который связан с другим представлением django - PullRequest
0 голосов
/ 06 мая 2018

Как я могу использовать свою пользовательскую форму под названием PayForm внутри шаблона (Post.html), который является шаблоном представления под названием Post. Я пытался указать оба представления на один и тот же шаблон, но, как мне сказали, вы не можете указать два представления на один и тот же шаблон, поэтому я в данный момент застрял на этом

models.py

from django.db import models
from django.urls import reverse
from PIL import Image

# Create your models here.


class Post(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, unique=True)
    created = models.DateTimeField(auto_now_add=True)
    content = models.TextField(default="---")
    current_price = models.IntegerField(default=0)
    reduction = models.IntegerField(default=0)
    original_price = models.IntegerField(default=0)
    Status = models.CharField(max_length=5, default="✓")
    img = models.CharField(max_length=255)
    sold = models.IntegerField(default=0)
    endday = models.CharField(max_length=30, default="apr 27, 2018 16:09:00")


    class Meta:
        ordering = ['-created']

        def __unicode__(self):
            return u'%s'% self.title

    def get_absolute_url(self):
        return reverse('Products.views.post', args=[self.slug])

    def __str__(self):
        return self.title



class Payment(models.Model):
    Author = models.CharField(max_length=255)
    Product = models.CharField(max_length=255)
    Payment_ID = models.CharField(max_length=255)
    Status = models.CharField(max_length=5, default="X")
    Review_result = models.CharField(max_length=255, default="Not yet reviewed")
    Address = models.CharField(max_length=255, default='')
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created']

        def __unicode__(self):
            return u'%s'% self.Status

    def __str__(self):
        return self.Status

views.py

from django.shortcuts import render, render_to_response , get_object_or_404, redirect
from .models import Post
from django.contrib.auth import authenticate, login, logout
from .forms import RegistrationForm, PayForm


def index(request):
    posts=Post.objects.all()
    return render(request, 'Index.html', {"posts": posts})


def post(request, slug):
    return render(request, 'post.html', {'post': get_object_or_404(Post, slug=slug)})

def new_payment(request):

    template ='payment.html'
    if request.method == 'POST':
        form = PayForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('index')
        else:
            print('form invalid')

    else:
        form = PayForm({'Author':request.user.username})

    context = {
        'form' : form,
    }
    return render(request, template, context)

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Payment, Post

class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

    class Meta:
        model = User
        fields = (
                'username',
                'first_name',
                'last_name',
                'email',
                'password1',
                'password2',
            )

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user

class PayForm(forms.ModelForm):
    class Meta: 

        model = Payment
        fields = ['Author', 'Product', 'Payment_ID', 'Address']

Если кто-то может помочь мне с этим, будет очень признателен

1 Ответ

0 голосов
/ 06 мая 2018

Если вы уже создали new_payment_form.html (или как вы его называли), вы можете просто добавить к post.html, используя тег {% include %}, окруженный соответствующими тегами <form>, и все, что вам нужно для этого. , {% Include%}, по сути, копирует и вставляет весь код из любого файла, который есть внутри тега. И общее правило, Product означает класс, а product означает переменную или поле.

# new_payment_form.html is the name of your html file. 
# template_path is the directory to your template. 
<form>
    {% include 'template_path/new_payment_form.html' %}
    <button> # submit button
</form>

Однако вам все еще нужно обработать его в представлении.

def post(request, slug):
    """
    (all the if: else: stuff)
    """
    # Set new_payment product
    new_payment = PayForm(initial={'Product': slug})

    return render(request, 'post.html', {'post': get_object_or_404(Post, slug=slug), 'new_payment': new_payment})

Вы, вероятно, перепишете свое мнение, и есть некоторые детали, которые нужно выяснить, но это должно привести вас в правильном направлении. Возможно, вы захотите изменить slug на продукт id или pk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...