首页 > 解决方案 > Django 表单 - 自动填写表单的用户 url attr - RelatedObjectDoesNotExist

问题描述

我仍然坚持我的问​​题。所以我找到了一种新的方法来做到这一点。更好的是,我认为您的帮助将不胜感激。

path('new/<seller>/', CreateChannelSellerView.as_view(),name="channel_to"),

假设我得到 .../new/fredo/ -> fredo 是卖家的用户名。我想抓住它。但是我遇到了一个问题:

异常类型:RelatedObjectDoesNotExist 异常值:
渠道没有卖家。

痕迹:

视图.py

class CreateChannelSellerView(CreateView):
    model = Channel
    form_class = CreateSellerChannelForm
    template_name = 'channel_seller_new.html'
    
    def form_valid(self, form):
        form.instance.consumer = self.request.user
        seller_field = self.kwargs['seller']
        current_seller = User.objects.filter(username=seller_field)
        if current_seller.count()<1:
            raise forms.ValidationError('Username does not exist')
        else:
            existed_seller = User.objects.get(username=seller_field)
            form.instance.seller.add(existed_seller)
            
        form.save()    
        return super(CreateChannelSellerView, self).form_valid(form)

    def get_success_url(self):
        return reverse_lazy('channel:channel_home')

模型.py

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

表格.py

class CreateSellerChannelForm(forms.ModelForm):
    class Meta:
        model = Channel
        widgets = {
            'name':forms.TextInput(attrs={'class':'','style':'','placeholder':'First group'}),
            
        }
        fields = [
            'name',
        ]

标签: pythondjango

解决方案


推荐阅读