【问题标题】:Python_Django - Adding Attending Event option - How to?Python_Django - 添加出席活动选项 - 如何?
【发布时间】:2017-05-13 15:39:53
【问题描述】:

我的 Web 应用程序中有 3 个模型。 Event(自制)、User(从django.contrib.auth.models导入)和EventAttendance(自制)。 EventAttendance 是一个连接 Event 和 User 表的表(通过外键 person_key 和 event_key)。

我想创建一个按钮来连接用户(登录的用户)和事件。它应该在 EventAttendance 表中插入一行。 我试图让它工作,但不幸的是它什么也没做。现在我可以通过 ADMIN 选项卡将数据放入 EventAttendance 表中。

有人可以检查我的代码并给我一些建议吗?

模型

class Event(models.Model):
    author = models.ForeignKey('auth.User')
    title = models.CharField(max_length=200)
    place = models.CharField(max_length=100)
    start = models.DateTimeField()
    price = models.IntegerField()
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title


class EventAttendance(models.Model):
    person_key = models.ForeignKey(User, on_delete=models.CASCADE)
    event_key = models.ForeignKey('Event', on_delete=models.CASCADE)
    attended = models.BooleanField()

    def __str__(self):
        return "%s - %s" % (self.event_key, self.person_key)

表格`

class EventForm(forms.ModelForm):
    class Meta:
    model = Event
    fields = ('title', 'text','place','start','price',)

class EventAttendanceForm(forms.ModelForm):
    class Meta:
    model = EventAttendance
    widgets = {
        'event_key': forms.HiddenInput(),
    }
    fields = ['person_key', 'event_key', 'attended',]

class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)
    class Meta:
    model = User
    fields = ( "username", "email" )

查看

def event_attendance(request,pk):
    event = get_object_or_404(Event, pk=pk)
    #if request.method == "POST":
    form = EventAttendanceForm(request.POST)
    EventAttendance = form.save(commit=False)
    EventAttendance.person_key = user.id
    EventAttendance.event_key = event.id
    EventAttendance.attended = 1
    EventAttendance.save()
    return redirect('event_detail', pk=event.pk)

    return render(request, 'events/post_detail.html', )

 def event_new(request):
     if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
           event = form.save(commit=False)
           event.author = request.user
           event.published_date = timezone.now()
           event.save()
           return redirect('event_detail', pk=event.pk)
     else:
          form = EventForm()
     return render(request, 'events/post_edit.html', {'form': form})

模板 - 我在哪里使用它

{% extends 'events/base.html' %}

{% block content %}
  <div class="event">
    {% if event.published_date %}
        <div class="date">
          <p> <u>Pridane:</u> {{ event.published_date }} </p>
          <p> </p>
          <p> <u>Autor:</u> {{ event.author }} </p>

          <br>
        </div>
    {% endif %}
    <a class="btn btn-default" href="{% url 'event_edit' pk=event.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
    <a class="btn btn-default" href="{% url 'event_remove' pk=event.pk %}"><span class="glyphicon glyphicon-remove"></span></a>
    <a class="btn btn-default" href="{% url 'event_attendance' pk=event.pk %}"><span class="glyphicon glyphicon-ok"></span></a>
    <h1>{{ event.title }}</h1>
    <p><u>Miesto</u>: {{ event.place }} </p>
    <p><u>Zaciatok</u>: {{ event.start }} </p>
    <p><u>Cena</u>: {{ event.price }} </p>
    <br>

    <p><u>Zucastneni:</u> {{attendance}}</p>
    <br>
    <p><u>Blizsie Informacie:</u></p>
    <p>{{ event.text|linebreaksbr }}</p>
  </div>
{% endblock %}

base.html

{% load staticfiles %}

<html>
  <head>
      <title>Eventovy katalog</title>
      <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
      <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
       <link href="https://fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
       <link rel="stylesheet" href="{% static 'css/events.css' %}">
   </head>
     <body>
        <div class="page-header">
        {% if user.is_authenticated %}
          <a href="{% url 'event_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
        {% endif %}
        <h1><a href="/">Eventovy katalog</a></h1>
         </div>
        <div class="content container">
          <div class="row">
            <div class="col-md-8">
                {% block content %}
                {% endblock %}
            </div>
        </div>
    </div>
</body>

post_edit.html

{% extends 'events/base.html' %}

{% block content %}
   <h1>Pridaj event</h1>
   <form method="POST" class="post-form">{% csrf_token %}
      {{ form.as_p }}
      <button type="submit" class="save btn btn-default">Save</button>
   </form>
{% endblock %}

如果您需要任何其他详细信息,请告诉我,我将它们上传到某个地方。

感谢您的宝贵时间!

这是我的新功能,但我仍在努力将新行插入我的数据库。有什么建议吗?

def event_attendance(request):
    event = get_object_or_404(Event)
    attendance = EventAttendance(person_key = request.user , 
    event_key = event.id, attended = True)
    attendance.save(force_insert=True)
    transaction.commit()
    return render(request, 'events/post_detail.html')

【问题讨论】:

  • 您是否从帖子中获取值?你的表格在哪里显示?你试过打印请求吗。POST
  • @Exprator - 我试图打印它,这就是我得到的 ...所以它看起来不起作用。
  • 是的,您的查询没有返回任何内容,您需要更改查询
  • 现在我有点迷失了。我试图这样做,但数据库内部没有发生任何事情(没有创建新实例):我编辑了我的帖子,你可以在那里看到我的新功能。
  • 您正在尝试将用户的事件输入到 eventattendance 表中,对吗?用户登录并选择事件然后提交表单?这会输入值吧?

标签: python django django-models django-forms django-views


【解决方案1】:

解决方案在我的 urls.py 文件中:

上一个值:

url(r'^post/(?P<pk>\d+)/$', views.event_attendance, name='event_attendance') 

新值:

url(r'^post/(?P<pk>\d+)/attendance/$', views.event_attendance, name='event_attendance')

也许它会在未来为某人服务!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多