python - 如何在 django 表单中添加自定义方法
问题描述
我是 django 的新手,我正在创建一个假期应用程序。我希望能够在创建新行程时,创建行程的用户成为该行程的成员。
这是我的models.py文件:
class Trip(models.Model):
trip_name = models.CharField(max_length=255,unique=False)
start_date = models.DateField(default=datetime.date.today)
end_date = models.DateField(default=datetime.date.today)
slug = models.SlugField(allow_unicode=True,unique=True)
members = models.ManyToManyField(User,through='TripMember')
def __str__(self):
return self.trip_name
def save(self,*args,**kwargs):
self.slug = slugify(self.trip_name)
super().save(*args,**kwargs)
def get_absolute_url(self):
return reverse('trips:single',kwargs={'slug':self.slug})
class Meta:
ordering = ['start_date']
class TripMember(models.Model):
trip = models.ForeignKey(Trip,null=True,related_name='memberships',on_delete=models.SET_NULL)
user = models.ForeignKey(User,null=True,related_name='user_trips',on_delete=models.SET_NULL)
def __str__(self):
return self.user.username
class Meta:
unique_together = ('trip','user')
这是我的forms.py文件:
class TripCreateForm(forms.ModelForm):
class Meta:
fields = ('trip_name','start_date','end_date')
model = Trip
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["trip_name"].label = "Trip Name"
self.fields["start_date"].label = "Start Date"
self.fields["end_date"].label = "End Date"
这是我的views.py文件:
class CreateTrip(CreateView):
form_class = TripCreateForm
template_name = 'trips/trip_form.html'
和我的trip_form.html页面:
<form action="{% url 'trips:create' %}" method="post" id='tripForm'>
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" class="btn btn-primary btn-large" value="Create">
</form>
我将把用户设置为旅行会员的代码放在哪里?为什么?另外,如果有更好的设置方法,请告诉我!我打算把它放在模型的保存部分,但我不太确定这是否正确。谢谢!
解决方案
您可以在视图中覆盖类的form_valid()
方法:CreateTrip
def form_valid(self, form):
"""If the form is valid, save the associated model."""
self.object = form.save()
# add the current user to the members list of the trip
user = self.request.user
self.object.members.add(user)
return super().form_valid(form)
推荐阅读
- tensorflow - 无法使用 localhost 打开张量板?
- reactjs - 动态渲染组件中的组件
- reactjs - 无法从 React 应用程序获取 API
- codenameone - 有没有办法将数组列表中的项目变成单独的按钮?
- solr - 如何使用 pentaho 水壶在 SOLR 中写入或索引数据?
- wordpress - Wordpress REST API“orderby”元值
- javascript - 确认弹出窗口工作正常但不删除 .net 核心中的项目
- python - 在 django 中使用 PasswordResetView 时出现反向 URL 错误
- visual-studio - 如何在 Visual Studio 的同一解决方案下找到哪个 NuGet 包安装在哪个类库项目上?
- spring-integration - 抽象 Spring Cloud Stream 生产者和消费者代码