无法将测试传递给具有manytomy字段的POST form视图

2024-05-13 07:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的github文件位于此处https://github.com/cbaldwin20/project_9/blob/master/menu/tests.py

我不能让这个测试通过(注意'Menu'的数据库中已经有一个对象,所以我试图添加另一个对象使其成为2。谢谢你的建议。在

def test_create_new_menu_view(self):
        self.client.post('/menu/new', data={
            'expiration_date': timezone.now() + timezone.timedelta(days=2),
                        'season': 'Spring 2018',
                        'created_date': timezone.now(),
                        'items': ['1']
            })
        self.assertEqual(Menu.objects.count(), 2)

在这个观点上

^{pr2}$

使用此表单

class MenuForm(forms.ModelForm):
    expiration_date = forms.DateField(widget=forms.SelectDateWidget())
    items = forms.ModelMultipleChoiceField(queryset=Item.objects.all(), required=False, widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Menu
        exclude = ('created_date',) 

以及表单使用的这个模型

class Menu(models.Model):
    season = models.CharField(max_length=20)
    items = models.ManyToManyField('Item', related_name='items')
    created_date = models.DateTimeField(
            default=timezone.now)
    expiration_date = models.DateTimeField(
            blank=True, null=True)

Tags: 对象selfgithubnewdatemodelsitemsforms
1条回答
网友
1楼 · 发布于 2024-05-13 07:16:23

测试方法中通过httppost提交的表单数据将使表单无效。您需要以类似格式(YYYY-MM-DD)发送日期,因为如果在浏览器中提交表单,则会传递日期。在

def test_create_new_menu_view(self):

    expiration_date = timezone.now() + timezone.timedelta(days=2)

    self.client.post('/menu/new/', data={
        'expiration_date': expiration_date.strftime("%Y-%m-%d"),
        'season': 'Spring 2018',
        'created_date': timezone.now().strftime("%Y-%m-%d"),
        'items': ['1']
    })

    self.assertEqual(Menu.objects.count(), 2)

相关问题 更多 >