Python_Django-添加参与事件选项-如何?
我的web应用程序中有3个模型。事件(自制)、用户(从django.contrib.auth.models导入)和事件出席(自制)。 EventAttention是一个连接事件和用户表的表(通过外键person\u key和Event\u key) 我想创建一个按钮,将连接用户(登录者)和事件。它应该在表中插入一行。 我试图让它工作,但不幸的是,它什么也没做。现在我可以通过ADMIN选项卡将数据放入EventAttention表中 有人能查一下我的密码并给我一些建议吗 型号Python_Django-添加参与事件选项-如何?,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我的web应用程序中有3个模型。事件(自制)、用户(从django.contrib.auth.models导入)和事件出席(自制)。 EventAttention是一个连接事件和用户表的表(通过外键person\u key和Event\u key) 我想创建一个按钮,将连接用户(登录者)和事件。它应该在表中插入一行。 我试图让它工作,但不幸的是,它什么也没做。现在我可以通过ADMIN选项卡将数据放入EventAttention表中 有人能查一下我的密码并给我一些建议吗 型号 class Even
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 %}
解决方案位于my urls.py文件中: 以前的值:
url(r'^post/(?P<pk>\d+)/$', views.event_attendance, name='event_attendance')
url(r'^post/(?P\d+/$),views.event\u attention,name='event\u attention')
新值:
url(r'^post/(?P<pk>\d+)/attendance/$', views.event_attendance, name='event_attendance')
url(r'^post/(?P\d+)/attention/$,views.event\u attention,name='event\u attention')
也许将来它会为某个人服务 您是否从post获得了这些值?您的表格显示在哪里?你试过打印请求了吗。POST@Exprator-我试着把它打印出来,这就是我得到的。。。是的,您的查询没有返回任何内容,您需要更改查询。现在我有点迷路了。我尝试过这样做,但是DB内部没有发生任何事情(没有创建新实例):我编辑了我的帖子,您可以在那里看到我的新函数。您正在尝试将用户的事件输入EventAttention表,对吗?用户登录并选择和事件,然后提交表单?这将输入正确的值吗?
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')
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')