Django表单:两个用户(A和B)相关的ObjectDoesNotExist异常值通道没有卖方
我面临一个问题。我的目标是知道数据库中是否已经存在用户。如果为真,则将其添加到频道并创建它 表单中只有两个字段供消费者使用Django表单:两个用户(A和B)相关的ObjectDoesNotExist异常值通道没有卖方,django,Django,我面临一个问题。我的目标是知道数据库中是否已经存在用户。如果为真,则将其添加到频道并创建它 表单中只有两个字段供消费者使用 频道名称 卖方名称(检查其是否有效,如果有效,则添加) 我真的不明白为什么那不管用 class CreateChannelView(CreateView): model = Channel form_class = CreateChannelForm template_name = 'channel_new.html' def form_valid(self, for
- 频道名称
- 卖方名称(检查其是否有效,如果有效,则添加)
class CreateChannelView(CreateView):
model = Channel
form_class = CreateChannelForm
template_name = 'channel_new.html'
def form_valid(self, form):
form.instance.consumer = self.request.user
sellers = self.request.POST.get("seller")
current_seller = User.objects.filter(username=sellers)
if current_seller.count()<1:
raise forms.ValidationError('Username does not exist')
else:
existed_seller = User.objects.get(username=sellers)
form.instance.seller.add(existed_seller)
form.save()
return super(CreateChannelView, self).form_valid(form)
def get_success_url(self):
return reverse_lazy('channel:channel_home')
class Channel(models.Model):
consumer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="channel_consumer", blank=True, null=True)
name = models.CharField(max_length=10)
seller = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="channel_seller")
def save(self, *args, **kwargs):
if not self.slug:
self.slug = unique_slugify(self, slugify(self.name))
super().save(*args, **kwargs)
def __str__(self):
return self.name
类CreateChannelView(CreateView):
模型=通道
form_class=CreateChannelForm
模板名称='channel\u new.html'
def表单_有效(自身、表单):
form.instance.consumer=self.request.user
卖方=self.request.POST.get(“卖方”)
当前卖方=用户.对象.过滤器(用户名=卖方)
如果当前的\u seller.count()答案如下:)
def form_有效(self,form):
form.instance.consumer=self.request.user
卖方=self.request.POST.get(“卖方”)
当前卖方=用户.对象.过滤器(用户名=卖方)
如果当前为_seller.count(),为什么不将seller
作为CreateChannelForm
的一部分?验证和清理输入正是Django表单的全部内容。我曾尝试使用crispy表单来验证和清理输入,但问题是我没有获得可以写入用户名的输入。
<form method="post" class="user-log">
{% csrf_token %}
{% for field in form %}
<div class="mt-10">
{{ field }}
</div>
{% endfor %}
<div class="mt-10">
<input type="text" name="seller" placeholder="Mike" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Jean'" required="" class="single-input">
</div>
<input type="submit" class="" value=" Add a new channel">
</form>
RelatedObjectDoesNotExist at /channel/new/
Exception Value: Channel has no seller.
Trace:
form.instance.seller.add(existed_seller)
__class__
<class 'channel.views.CreateChannelView'>
current_seller
<QuerySet [<User: fredo>]>
existed_seller
<User: fredo>
form
<CreateChannelForm bound=True, valid=True, fields=(name)>
self
<channel.views.CreateChannelView object at 0x2b00798d3350>
sellers
'fredo'
def form_valid(self, form):
form.instance.consumer = self.request.user
sellers = self.request.POST.get("seller")
current_seller = User.objects.filter(username=sellers)
if current_seller.count()<1:
raise forms.ValidationError('Username does not exist')
else:
existed_seller = User.objects.get(username=sellers)
form.instance.seller = existed_seller #here is the chnage
form.save()
return super(CreateChannelView, self).form_valid(form)