Silverstripe下拉字段不显示选定的保存值

Silverstripe下拉字段不显示选定的保存值,silverstripe,silverstripe-4,Silverstripe,Silverstripe 4,我在CMS中创建了一个下拉字段,如下所示: class ProductPage extends Page { //..... private static $has_one = [ 'TeaserImage'=>Image::Class, 'LinkedProduct'=>'Product' ]; public function getCMSFields(){ $fields = parent::ge

我在CMS中创建了一个下拉字段,如下所示:

class ProductPage extends Page {
    //.....

    private static $has_one = [
        'TeaserImage'=>Image::Class,
        'LinkedProduct'=>'Product'
    ];

    public function getCMSFields(){
        $fields = parent::getCMSFields();

        $productLinkField = DropdownField::create('LinkedProduct', 'Link a Product', Product::get()->map('ID', 'ProductName'));
        $productLinkField->setEmptyString('(Select one)');

        $fields->addFieldToTab('Root.Main', $productLinkField, 'Content');

        return $fields;
    }
}
问题是,当我选择一个值并保存/发布页面时,下拉列表返回到“选择一个”,而不是显示保存的选择

我没有检查数据库以查看是否存储了该值,但我认为是这样

编辑:不是重复的。 建议的副本涉及从CMS中删除字段。 此问题涉及将下拉值设置为保存的选择


然而,答案是相似的。用户必须始终将ID附加到has\u one字段,以便CMS与之交互。

默认情况下,当将
has\u one
关系字段保存到数据库中时,SilverStripe会在其末尾附加一个“ID”参数

因此,当您重写关系字段时,需要将“ID”附加到字段标识符

DropdownField::create('LinkedProductID', 'Link a Product', Product::get()->map('ID', 'ProductName'));

答案与这里相同:我需要在create语句中向“LinkedProduct”添加ID?是的,就是这样。谢谢。是的,我更新了另一个问题的答案,有可能是重复的