Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单:两个用户(A和B)相关的ObjectDoesNotExist异常值通道没有卖方_Django - Fatal编程技术网

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)