详细信息页面上的模型和表单模型的详细信息

Details for model and form model on detail page

我在一个页面、详细信息页面 (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 %}

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

FormMixin上form_valid的默认定义就是简单的重定向到成功URL。那是因为它对模型一无所知,所以它不期望表单上有 .save() 方法。

您应该改用 ModelFormMixin。