详细信息页面

时间:2018-01-10 15:20:20

标签: python django forms detailsview

我在一页,详细页面(Django 1.11)上连接两个模型时遇到问题。

我有模型事件 - 我想在详细信息页面上显示此模型的详细信息 - 这对我有用。

class Event(models.Model):
    title = models.CharField(max_length=500)
    date = models.DateField()
    text = models.TextField()
    image = FilerImageField(null=True, blank=True)
    free_places = models.IntegerField()

    class Meta:
        ordering = ['-date']

    def __str__(self):
        return self.title

另一方面,我有模型注册

class Register(models.Model):
    event = models.ManyToManyField(Event)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    company = models.CharField(max_length=30, blank=True)
    street = models.CharField(max_length=50, blank=True)
    post_code = models.CharField(max_length=30, blank=True)
    city = models.CharField(max_length=30, blank=True)
    email = models.EmailField()
    phone_number = models.IntegerField(max_length=30)

    def __str__(self):
        return self.first_name

我想在详细信息页面上的文件夹注册用户,下面是事件的详细信息。

这是我的详细视图,我想在其中显示事件的详细信息并将数据从用户传输到注册模型:

class EventDetailView(DetailView, FormMixin):
    model = models.Event
    form_class = forms.RegisterForm

    def get_success_url(self):
        return reverse('events:list')

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

模板:

{% extends 'base.html' %}

{% block content %}
    <ul>
        <h1>Detail page:</h1>
        <li>{{ object.title }}</li>
        <li>{{ object.text }}</li>
        <li>{{ object.date }}</li>
    </ul>

    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit" />
    </form>

{% endblock content %}

按下提交按钮后,我在注册模型中没有任何项目。

1 个答案:

答案 0 :(得分:0)

FormMixin上的form_valid的默认定义只是重定向到成功URL。这是因为它对模型一无所知,因此不希望在表单上使用.save()方法。

您应该使用ModelFormMixin。