无法分配“2”:"Card.set" 必须是 "Set" 实例

Cannot assign "2": "Card.set" must be a "Set" instance

关于如何解决这个问题有什么建议吗?

views.py

###################
##Dashboard views##
###################

    def dashboard(request): 
        set = Set.objects.all()
        set_count = set.count()
        
       
        if request.method == 'POST':
            form = SetForm(request.POST)
            if form.is_valid():
                form.save()
                set_name = form.cleaned_data.get('name')
                messages.success(request, f'{set_name} has been added')
                return redirect('dashboard-dashboard')
        else:
            form = SetForm()
        context = {
            'set': set,
            'form': form,
        }
        return render(request, 'dashboard/dashboard.html', context)

#############
##Set views##
#############

    #Cards is for when you are adding cards to a set or looking at the content of a set
    def set_edit(request, pk): 
        set_title = Set.objects.get(id=pk)
        card = Set.objects.get(id=pk).card_set.all() 
        set_id = pk 
        set = Set.objects.get(id=pk)
    
        if request.method == 'POST': 
            form = CardForm(request.POST) 
            print('Entered Post condition')
            if form.is_valid(): 
                obj = form.save(commit=False)
                obj.set = pk
                obj.save()
                card_name = form.cleaned_data.get('kanji')
                messages.success(request, f'{card_name} has been added')
                return redirect('dashboard-set-edit',pk) 
        else:
            form = CardForm()
        
        context = { 
            'card': card,
            'form': form,
        }
        return render(request, 'dashboard/set_edit.html', context)
    
    ```


**models.py**

    ```
    class Set(models.Model): 
        name = models.CharField(max_length=100, null=True)
        quantity = models.PositiveIntegerField(null=True, blank=True)
        date_created = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return f'{self.id}' 
    
    class Card(models.Model): 
        kanji = models.CharField(max_length=100, null=True) 
        kana = models.CharField(max_length=100, null=True)
        english = models.CharField(max_length=100, null=True)
        set = models.ForeignKey(Set, on_delete=models.CASCADE,default=3)
      
        def __str__(self):
            return f'{self.id}'
    
    ```

**forms.py**

    ```
    class CardForm(forms.ModelForm):
        class Meta:
            model = Card
            # fields = '__all__' 
            exclude = ('set',) 
    
    
    class SetForm(forms.ModelForm):
        class Meta:
            model = Set
            fields = '__all__' 
    
    ```

**urls.py**
urlpatterns = [

     #########
     ##Sets###
     #########  
     path('sets/edit/<int:pk>/', views.set_edit, 
          name='dashboard-set-edit'),

     path('sets/delete/<int:pk>/', views.set_delete, 
          name='dashboard-set-delete'),
     
     #########
     ##Cards##
     #########  
     path('card/delete/<int:pk>/', views.card_delete,
         name='dashboard-cards-delete'),

     path('cards/detail/<int:pk>/', views.card_detail,
         name='dashboard-cards-detail'),

     path('cards/edit/<int:pk>/', views.card_edit, 
         name='dashboard-cards-edit'),

     #############
     ##Dashboard##
     #############
     path('dashboard/', views.dashboard, name='dashboard-dashboard'),
]

```

您应该将其分配给 .set_id,而不是 .set:

if form.is_valid():
    #     use set_id ↓
    form<b>.instance.set_id = pk</b>
    obj = form.save()
    card_name = form.cleaned_data.get('kanji')
    messages.success(request, f'{card_name} has been added')
    return redirect('dashboard-set-edit',pk)